frmRSS.vb
上传用户:szledliu
上传日期:2021-01-29
资源大小:13805k
文件大小:11k
源码类别:

C#编程

开发平台:

C#

  1. '///////////////////////////////////////////
  2. 'This form is just a quick and dirty example of 
  3. 'implementing a RSS reader application
  4. 'There are tons of great RSS Reader examples
  5. 'available online if you would choose to
  6. 'extend the reader to a full powered reader.
  7. '///////////////////////////////////////////
  8. Imports System.Data.OleDb
  9. Imports System.Text
  10. Public Class frmRSS
  11.     Private ShowMenu As Boolean = False
  12.     Private Sub frmRSS_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
  13.         wbRSS.Dispose()
  14.     End Sub
  15.     Private Sub frmRSS_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  16.         dgRSS.AutoGenerateColumns = False
  17.         LoadFromDB()
  18.     End Sub
  19.     Dim pcount As Integer = 0
  20.     Public Sub LoadFromDB()
  21.         tvRSS.Nodes(0).Nodes.Clear()
  22.         Dim strSQL As String = "SELECT * FROM RSSGROUPS"
  23.         Dim oConn As New OleDbConnection(AppManager.ConnString)
  24.         Dim oDa As New OleDbDataAdapter(strSQL, oConn)
  25.         Dim dt As New DataTable
  26.         Dim dr As DataRow
  27.         Dim oNode As TreeNode
  28.         Try
  29.             oDa.Fill(dt)
  30.             For Each dr In dt.Rows
  31.                 oNode = New TreeNode
  32.                 If dr.Item("ParentID") = 0 Then
  33.                     oNode.Text = dr.Item("GroupTitle")
  34.                     oNode.Tag = dr.Item("ID")
  35.                     oNode.ImageIndex = 1
  36.                     oNode.StateImageIndex = 1
  37.                     tvRSS.Nodes(0).Nodes.Add(oNode)
  38.                     GetChildren(oNode, dt)
  39.                 End If
  40.             Next
  41.             tvRSS.Nodes(0).Expand()
  42.         Catch ex As Exception
  43.             Dim ofrm As New frmError
  44.             ofrm.err = ex
  45.             ofrm.ShowDialog(AppManager.MainForm)
  46.         End Try
  47.     End Sub
  48.     Private Sub GetChildren(ByVal oNode As TreeNode, ByVal dt As DataTable)
  49.         Dim dv As New DataView(dt)
  50.         dv.RowFilter = "parentID=" & Integer.Parse(oNode.Tag)
  51.         Dim row As DataRowView
  52.         Dim cNode As TreeNode
  53.         Try
  54.             For Each row In dv
  55.                 ' Perform the node addition
  56.                 cNode = New TreeNode
  57.                 cNode.Text = row("GroupTitle")
  58.                 cNode.Tag = row("ID")
  59.                 cNode.ImageIndex = 1
  60.                 cNode.StateImageIndex = 1
  61.                 oNode.Nodes.Add(cNode)
  62.                 GetChannels(cNode)
  63.                 GetChildren(cNode, dt)
  64.             Next
  65.         Catch ex As Exception
  66.             Dim ofrm As New frmError
  67.             ofrm.err = ex
  68.             ofrm.ShowDialog(AppManager.MainForm)
  69.         End Try
  70.     End Sub
  71.     Private Sub GetChannels(ByVal iNode As TreeNode)
  72.         Dim strSQL As String = "SELECT * FROM RSSChannels WHERE GROUPID=" & iNode.Tag
  73.         Dim oConn As New OleDbConnection(AppManager.ConnString)
  74.         Dim oDa As New OleDbDataAdapter(strSQL, oConn)
  75.         Dim dt As New DataTable
  76.         Dim dr As DataRow
  77.         Dim xNode As TreeNode
  78.         Try
  79.             oDa.Fill(dt)
  80.             For Each dr In dt.Rows
  81.                 xNode = New TreeNode
  82.                 xNode.Text = dr.Item("ChannelTitle")
  83.                 xNode.Tag = dr.Item("Link")
  84.                 xNode.ImageIndex = 0
  85.                 xNode.SelectedImageIndex = 0
  86.                 iNode.Nodes.Add(xNode)
  87.             Next
  88.         Catch ex As Exception
  89.             Dim ofrm As New frmError
  90.             ofrm.err = ex
  91.             ofrm.ShowDialog(AppManager.MainForm)
  92.         End Try
  93.     End Sub
  94.     Private Sub GetItemsDB(ByVal ChannelID As Integer)
  95.         Dim strSQL As String = "SELECT * FROM RSSFEEDS WHERE ChannelID=" & ChannelID
  96.         Dim oConn As New OleDbConnection(AppManager.ConnString)
  97.         Dim oDa As New OleDbDataAdapter(strSQL, oConn)
  98.         Dim dt As New DataTable
  99.         Dim dr As DataRow
  100.         Dim oNode As TreeNode
  101.         Try
  102.             oDa.Fill(dt)
  103.             For Each dr In dt.Rows
  104.                 oNode = New TreeNode
  105.                 oNode.Text = dr.Item("Title")
  106.                 oNode.Tag = dr.Item("Link")
  107.             Next
  108.         Catch ex As Exception
  109.             Dim ofrm As New frmError
  110.             ofrm.err = ex
  111.             If Not IsNothing(Me.Parent) Then
  112.                 ofrm.ShowDialog(Me.Parent)
  113.             Else
  114.                 ofrm.ShowDialog(Me)
  115.             End If
  116.         End Try
  117.     End Sub
  118.     Private Sub GetItemsFromInternet(ByVal RssLink As String)
  119.         'I am implementing a simple reader here just to show possible add ins..
  120.         'You will probably want to implement something more like...
  121.         'Dim myUrl As String = "URL to feed..."
  122.         'Dim reader As XmlReader = XmlReader.Create(myUrl)
  123.         'While reader.Read
  124.         'End While
  125.         Try
  126.             Dim ds As New DataSet
  127.             ds.ReadXml(RssLink)
  128.             dgRSS.DataSource = ds.Tables("item")
  129.             dgRSS.Update()
  130.             AppManager.MainForm.pBar.Visible = False
  131.         Catch ex As Exception
  132.             Dim ofrm As New frmError
  133.             ofrm.err = ex
  134.             ofrm.ShowDialog(AppManager.MainForm)
  135.         Finally
  136.             '
  137.         End Try
  138.     End Sub
  139.     Private Sub tvRSS_NodeMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles tvRSS.NodeMouseClick
  140.         If e.Button = Windows.Forms.MouseButtons.Left Then
  141.             If InStr(e.Node.Tag, "http://") Then
  142.                 GetItemsFromInternet(e.Node.Tag)
  143.             End If
  144.         End If
  145.     End Sub
  146.     Private Sub dgRSS_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgRSS.CellContentClick
  147.         'Build a "virtual" page to fully show returned details.
  148.         Select Case e.ColumnIndex
  149.             Case 0
  150.                 Dim strHtml As New StringBuilder
  151.                 strHtml.Append("<div align=""center"">")
  152.                 strHtml.Append("    <table border=""0"" width=""80%"">")
  153.                 strHtml.Append("        <tr>")
  154.                 strHtml.Append("            <td width=""100%"" height=""28"">")
  155.                 strHtml.Append("                <p align=""center""><font face=""Tahoma"" Color=""Black"">")
  156.                 strHtml.Append("<a href=""" & dgRSS.Rows(e.RowIndex).Cells(3).Value & """><b>" & _
  157.                 dgRSS.Rows(e.RowIndex).Cells(0).Value & "</b></font></p>")
  158.                 strHtml.Append("            </td>")
  159.                 strHtml.Append("        </tr>")
  160.                 strHtml.Append("        <tr>")
  161.                 strHtml.Append("            <td width=""100%"" height=""68"" valign=""top"">")
  162.                 strHtml.Append("                <p><font face=""Courier"" size=""3"">" & _
  163.                 dgRSS.Rows(e.RowIndex).Cells(1).Value & "... " & _
  164.                 "<a href=""" & dgRSS.Rows(e.RowIndex).Cells(3).Value & """>More info...</a></font></p>")
  165.                 strHtml.Append("            </td>")
  166.                 strHtml.Append("        </tr>")
  167.                 strHtml.Append("    </table>")
  168.                 strHtml.Append("</div>")
  169.                 wbRSS.DocumentText = strHtml.ToString
  170.         End Select
  171.     End Sub
  172.     Private Sub wbRSS_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles wbRSS.DocumentCompleted
  173.         ShowMenu = True
  174.     End Sub
  175.     Private Sub wbRSS_ProgressChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserProgressChangedEventArgs) Handles wbRSS.ProgressChanged
  176.         AppManager.MainForm.lblStatus.Text = wbRSS.StatusText
  177.         AppManager.MainForm.pBar.Value = ((e.CurrentProgress / e.MaximumProgress) * 100)
  178.     End Sub
  179.     Private Sub wbRSS_StatusTextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles wbRSS.StatusTextChanged
  180.         AppManager.MainForm.lblStatus.Text = wbRSS.StatusText
  181.     End Sub
  182.     Private Sub btnAddFeed_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAddFeed.Click
  183.         Dim ofrm As New frmAddRSS
  184.         ofrm.Mode = frmAddRSS.Modes.AddFeed
  185.         ofrm.RSSForm = Me
  186.         ofrm.ShowDialog(AppManager.MainForm)
  187.     End Sub
  188.     Private Sub btnAddGroup_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAddGroup.Click
  189.         Dim ofrm As New frmAddRSS
  190.         ofrm.Mode = frmAddRSS.Modes.AddGroup
  191.         ofrm.RSSForm = Me
  192.         ofrm.ShowDialog(AppManager.MainForm)
  193.     End Sub
  194.     Private Sub DeleteToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DeleteToolStripMenuItem.Click
  195.         If Not IsNothing(tvRSS.SelectedNode) Then
  196.             If InStr(tvRSS.SelectedNode.Tag, "http://") Then
  197.                 'We are deleting a single feed.
  198.                 If MessageBox.Show("Are you sure you want to delete feed " & _
  199.                 tvRSS.SelectedNode.Text & "?", "Confirm Delete", MessageBoxButtons.YesNo, _
  200.                 MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
  201.                     DeleteItem()
  202.                 End If
  203.             Else
  204.                 'We are deleting a group
  205.                 If tvRSS.SelectedNode.Nodes.Count > 0 Then
  206.                     MessageBox.Show("You must 1st delete any children of this group", "Cannot delete", MessageBoxButtons.OK, MessageBoxIcon.Information)
  207.                 Else
  208.                     If MessageBox.Show("Are you sure you want to delete group " & _
  209.                     tvRSS.SelectedNode.Text & "?", "Confirm Delete", MessageBoxButtons.YesNo, _
  210.                     MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
  211.                         DeleteGroup()
  212.                     End If
  213.                 End If
  214.             End If
  215.         End If
  216.     End Sub
  217.     Private Sub DeleteItem()
  218.         Dim strSQL As String = "DELETE FROM RssChannels WHERE Link='" & _
  219.         tvRSS.SelectedNode.Tag & "'"
  220.         Dim oConn As New OleDbConnection(AppManager.ConnString)
  221.         Dim oCmd As New OleDbCommand(strSQL, oConn)
  222.         Try
  223.             oConn.Open()
  224.             oCmd.ExecuteNonQuery()
  225.             oConn.Close()
  226.             LoadFromDB()
  227.         Catch ex As Exception
  228.             MsgBox(ex.Message.ToString)
  229.         Finally
  230.             oConn.Dispose()
  231.             oCmd.Dispose()
  232.         End Try
  233.     End Sub
  234.     Private Sub DeleteGroup()
  235.         Dim strSQL As String = "DELETE FROM RssGroups WHERE ID=" & _
  236.          CInt(tvRSS.SelectedNode.Tag)
  237.         Dim oConn As New OleDbConnection(AppManager.ConnString)
  238.         Dim oCmd As New OleDbCommand(strSQL, oConn)
  239.         Try
  240.             oConn.Open()
  241.             oCmd.ExecuteNonQuery()
  242.             oConn.Close()
  243.             LoadFromDB()
  244.         Catch ex As Exception
  245.             MsgBox(ex.Message.ToString)
  246.         Finally
  247.             oConn.Dispose()
  248.             oCmd.Dispose()
  249.         End Try
  250.     End Sub
  251.     Private Sub mnuMainBrowser_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuMainBrowser.Click
  252.         If Not IsNothing(wbRSS.Document.Url) Then
  253.             Dim ofrm As New frmBrowser
  254.             AppManager.AddTab(ofrm, wbRSS.Document.Url.ToString)
  255.         End If
  256.     End Sub
  257.     Private Sub cmWB_Opening(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles cmWB.Opening
  258.         cmWB.Enabled = ShowMenu
  259.     End Sub
  260.     Private Sub mnuRefresh_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuRefresh.Click
  261.         LoadFromDB()
  262.     End Sub
  263. End Class