<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # Mono Winforms 中的高級控件 > 原文: [http://zetcode.com/tutorials/ironpythontutorial/advancedcontrols/](http://zetcode.com/tutorials/ironpythontutorial/advancedcontrols/) 在 IronPython Mono Winforms 教程的這一部分中,我們介紹一些更高級的控件。 即`ListBox`,`ListView`和`TreeView`控件。 ## `ListBox` `ListBox`控件用于顯示項目列表。 用戶可以通過單擊選擇一個或多個項目。 `listbox.py` ```py #!/usr/bin/ipy import clr clr.AddReference("System.Windows.Forms") clr.AddReference("System.Drawing") from System.Windows.Forms import Application, Form, StatusBar from System.Windows.Forms import ListBox, DockStyle from System.Drawing import Size class IForm(Form): def __init__(self): self.Text = "ListBox" lb = ListBox() lb.Parent = self lb.Items.Add("Jessica") lb.Items.Add("Rachel") lb.Items.Add("Angelina") lb.Items.Add("Amy") lb.Items.Add("Jennifer") lb.Items.Add("Scarlett") lb.Dock = DockStyle.Fill lb.SelectedIndexChanged += self.OnChanged self.sb = StatusBar() self.sb.Parent = self self.Size = Size(220, 220) self.CenterToScreen() def OnChanged(self, sender, event): self.sb.Text = sender.SelectedItem Application.Run(IForm()) ``` 我們的示例顯示了一個具有六個名稱的列表框。 所選項目顯示在狀態欄中。 ```py lb = ListBox() lb.Parent = self ``` `ListBox`控件已創建。 ```py lb.Items.Add("Jessica") ``` 這就是我們向`ListBox`控件添加新項目的方式。 該控件具有`Items`屬性。 該屬性是對列表框中項目列表的引用。 使用此引用,我們可以添加,刪除或獲取列表框中的項目數。 ```py lb.SelectedIndexChanged += self.OnChanged ``` 當我們選擇一個項目時,會觸發`SelectedIndexChanged`事件。 ```py def OnChanged(self, sender, event): self.sb.Text = sender.SelectedItem ``` 在`OnChange()`方法內,我們獲得列表框的選定值并將其設置為狀態欄。 ![ListBox](https://img.kancloud.cn/bd/1d/bd1d17da86df8a6a5f36ba86cb6b79ec_210x211.jpg) 圖:`ListBox` ## `ListView` `ListView`控件用于顯示項目集合。 它是比`ListBox`控件更復雜的控件。 它可以在各種視圖中顯示數據。 它主要用于在多列視圖中顯示數據。 `listview.py` ```py #!/usr/bin/ipy import clr clr.AddReference("System.Windows.Forms") clr.AddReference("System.Drawing") from System.Windows.Forms import Application, Form, StatusBar from System.Windows.Forms import ListView, View, ColumnHeader from System.Windows.Forms import ListViewItem, DockStyle, SortOrder from System.Drawing import Size class IForm(Form): def __init__(self): self.Text = 'ListBox' actresses = { 'Jessica Alba' : '1981', 'Angelina Jolie' : '1975', 'Natalie Portman' : '1981', 'Rachel Weiss' : '1971', 'Scarlett Johansson' : 1984 } name = ColumnHeader() name.Text = 'Name' name.Width = -1 year = ColumnHeader() year.Text = 'Year' self.SuspendLayout() lv = ListView() lv.Parent = self lv.FullRowSelect = True lv.GridLines = True lv.AllowColumnReorder = True lv.Sorting = SortOrder.Ascending lv.Columns.AddRange((name, year)) lv.ColumnClick += self.OnColumnClick for act in actresses.keys(): item = ListViewItem() item.Text = act item.SubItems.Add(str(actresses[act])) lv.Items.Add(item) lv.Dock = DockStyle.Fill lv.Click += self.OnChanged self.sb = StatusBar() self.sb.Parent = self lv.View = View.Details self.ResumeLayout() self.Size = Size(350, 300) self.CenterToScreen() def OnChanged(self, sender, event): name = sender.SelectedItems[0].SubItems[0].Text born = sender.SelectedItems[0].SubItems[1].Text self.sb.Text = name + ', ' + born def OnColumnClick(self, sender, event): if sender.Sorting == SortOrder.Ascending: sender.Sorting = SortOrder.Descending else: sender.Sorting = SortOrder.Ascending Application.Run(IForm()) ``` 在我們的示例中,我們有一個包含兩列的列表視圖。 在第一列中,我們顯示女演員的名字。 在第二個他們的出生日期。 數據存儲在`List`集合中。 通過選擇一行,一行中的數據將顯示在狀態欄中。 另外,通過單擊列標題,可以對數據進行排序。 ```py actresses = { 'Jessica Alba' : '1981', 'Angelina Jolie' : '1975', 'Natalie Portman' : '1981', 'Rachel Weiss' : '1971', 'Scarlett Johansson' : 1984 } ``` 我們將數據存儲在女演員詞典中。 ```py name = ColumnHeader() name.Text = 'Name' name.Width = -1 ``` 對于列表視圖中的每一列,我們創建一個`ColumnHeader`。 通過將`Width`設置為 -1,列的寬度等于列中最長的項目。 ```py lv = ListView() lv.Parent = self ``` `ListView`控件已創建。 ```py lv.FullRowSelect = True lv.GridLines = True lv.AllowColumnReorder = True lv.Sorting = SortOrder.Ascending ``` 在這里,我們設置控件的四個屬性。 該代碼行支持全行選擇,顯示網格線,通過拖動列對列進行重新排序并以升序對數據進行排序。 ```py lv.Columns.AddRange((name, year)) ``` 在這里,我們將兩個`ColumnHeader`添加到`ListView`控件中。 ```py for act in actresses.keys(): item = ListViewItem() item.Text = act item.SubItems.Add(str(actresses[act])) lv.Items.Add(item) ``` 此循環填充列表視圖控件。 每行作為`ListViewItem`類添加到列表視圖。 ```py lv.View = View.Details ``` `ListView`控件可以具有不同的視圖。 不同的視圖以不同的方式顯示數據。 ```py name = sender.SelectedItems[0].SubItems[0].Text born = sender.SelectedItems[0].SubItems[1].Text self.sb.Text = name + ', ' + born ``` 在`OnChanged()`方法內部,我們從選定的行中獲取數據并將其顯示在狀態欄上。 ```py if sender.Sorting == SortOrder.Ascending: sender.Sorting = SortOrder.Descending else: sender.Sorting = SortOrder.Ascending ``` 在這里,我們切換列的排序順序。 ![ListView](https://img.kancloud.cn/96/db/96dbeb00ebca34f4628e3dabd1b3b7e0_350x301.jpg) 圖:`ListView` ## `TreeView` `TreeView`控件顯示項目的分層集合。 此控件中的每個項目都由`TreeNode`對象表示。 `treeview.py` ```py #!/usr/bin/ipy import clr clr.AddReference("System.Windows.Forms") clr.AddReference("System.Drawing") from System.Windows.Forms import Application, Form, StatusBar from System.Windows.Forms import TreeView, TreeNode, DockStyle from System.Drawing import Size class IForm(Form): def __init__(self): self.Text = 'TreeView' tv = TreeView() root = TreeNode() root.Text = 'Languages' child1 = TreeNode() child1.Text = 'Python' child2 = TreeNode() child2.Text = 'Ruby' child3 = TreeNode() child3.Text = 'Java' root.Nodes.AddRange((child1, child2, child3)) tv.Parent = self tv.Nodes.Add(root) tv.Dock = DockStyle.Fill tv.AfterSelect += self.AfterSelect self.sb = StatusBar() self.sb.Parent = self self.Size = Size(220, 220) self.CenterToScreen() def AfterSelect(self, sender, event): self.sb.Text = event.Node.Text Application.Run(IForm()) ``` 這是`TreeView`控件的非常簡單的演示。 我們有一個根項目和三個子項。 ```py tv = TreeView() ``` 我們創建`TreeView`控件。 ```py root = TreeNode() root.Text = 'Languages' ... tv.Nodes.Add(root) ``` 在這里,我們創建一個根節點。 ```py child1 = TreeNode() child1.Text = 'Python' ``` 子節點以類似的方式創建。 ```py root.Nodes.AddRange((child1, child2, child3)) ``` 子節點插入到根節點的`Nodes`屬性中。 ![TreeView](https://img.kancloud.cn/53/16/5316c03905d6dcbb83c1d97628e64e32_250x251.jpg) 圖:`TreeView` ## 目錄 下面的代碼示例將更深入地研究`TreeView`控件。 `directories.py` ```py #!/usr/bin/ipy import clr clr.AddReference("System.Windows.Forms") clr.AddReference("System.Drawing") from System.Windows.Forms import Application, Form, StatusBar from System.Windows.Forms import Button, TreeView, TreeNode from System.Windows.Forms import DockStyle, AnchorStyles from System.Drawing import Size, Point from System.IO import Directory, DirectoryInfo HOME_DIR = '/home/vronskij' class IForm(Form): def __init__(self): self.Text = 'Directories' self.Size = Size(400, 400) self.tv = TreeView() self.SuspendLayout() self.tv.Parent = self self.tv.Location = Point(10,10) self.tv.Size = Size(self.ClientSize.Width - 20, self.Height - 200) self.tv.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right self.tv.FullRowSelect = False self.tv.ShowLines = True self.tv.ShowPlusMinus = True self.tv.Scrollable = True self.tv.AfterSelect += self.AfterSelect expand = Button() expand.Parent = self expand.Location = Point(20, self.tv.Bottom + 20) expand.Text = 'Expand' expand.Anchor = AnchorStyles.Left | AnchorStyles.Top expand.Click += self.OnExpand expandAll = Button() expandAll.Parent = self expandAll.Location = Point(20, expand.Bottom + 5) expandAll.Text = 'Expand All' expandAll.Anchor = AnchorStyles.Left | AnchorStyles.Top expandAll.Click += self.OnExpandAll collapse = Button() collapse.Parent = self collapse.Location = Point(expandAll.Right + 5, expand.Top) collapse.Text = 'Collapse' collapse.Anchor = AnchorStyles.Left | AnchorStyles.Top collapse.Click += self.OnCollapse collapseAll = Button() collapseAll.Parent = self collapseAll.Location = Point(collapse.Left, collapse.Bottom + 5) collapseAll.Text = 'Collapse All' collapseAll.Anchor = AnchorStyles.Left | AnchorStyles.Top collapseAll.Click += self.OnCollapseAll self.sb = StatusBar() self.sb.Parent = self self.ShowDirectories(self.tv.Nodes, HOME_DIR) self.ResumeLayout() self.CenterToScreen() def AfterSelect(self, sender, event): self.sb.Text = event.Node.Text def ShowDirectories(self, trvNode, path): dirInfo = DirectoryInfo(path) if (dirInfo != None): subDirs = dirInfo.GetDirectories() tr = TreeNode(dirInfo.Name) if (subDirs.Length > 0): for dr in subDirs: if not dr.Name.StartsWith("."): self.ShowDirectories(tr.Nodes, dr.FullName) trvNode.Add(tr) def OnExpand(self, sender, event): self.tv.SelectedNode.Expand() def OnExpandAll(self, sender, event): self.tv.ExpandAll() def OnCollapse(self, sender, event): self.tv.SelectedNode.Collapse() def OnCollapseAll(self, sender, event): self.tv.CollapseAll() Application.Run(IForm()) ``` 我們的代碼示例在`TreeView`控件中顯示指定主目錄的目錄。 該應用啟動有些延遲,因為它首先讀取主目錄的目錄結構。 表單上還有四個按鈕。 這些按鈕以編程方式展開和折疊節點。 ```py self.tv.Scrollable = True ``` 我們使`TreeView`控件可滾動,因為該控件顯示了大量目錄。 ```py self.ShowDirectories(self.tv.Nodes, HOME_DIR) ``` `ShowDirectories()`方法使用指定主目錄中可用的目錄填充`TreeView`控件的節點。 ```py if (subDirs.Length > 0): ... ``` 我們檢查是否有任何子目錄。 ```py for dr in subDirs: if not dr.Name.StartsWith("."): self.ShowDirectories(tr.Nodes, dr.FullName) ``` 我們遍歷所有目錄。 為此,我們使用了遞歸算法。 我們還跳過隱藏的目錄。 它們以 Unix 系統上的點開頭。 ```py trvNode.Add(tr) ``` 此代碼行實際上將目錄添加到`TreeView`控件。 ```py def OnExpand(self, sender, event): self.tv.SelectedNode.Expand() ``` 所有四個按鈕都將事件插入到方法中。 這是展開按鈕的方法。 它調用當前所選節點的`Expand()`方法。 ![Directories](https://img.kancloud.cn/1a/ee/1aee8db821c0523e66878ce874f5be18_400x401.jpg) 圖:`Directories` 在 IronPython Mono Winforms 教程的這一部分中,我們介紹了 Winforms 編程庫中提供的幾個高級控件。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看