Windows Forms Programming In C# 读书笔记 - 第八章 Controls

时间:2021-12-23 00:01:57
第六、七章只是略读(标题分别为 Advanced Drawing、Pringint),暂无笔记。

1。不同的 control 处理相同的事件
    
    可能会有这样的情况:用户点一个按钮和一个菜单项完成相同的作用(比如都是打开一个文件),这时如果分别写按钮和菜单项的事件处理代码(两端代码完全一样),就会出现重复,而且改动的时候也不得不改动多处。
    解决方法:把事件处理代码写成一个单独的方法,比如 OpenFile(),然后在事件处理方法中调用这个独立的方法。

2。ListBox 

    如何把自定义的类显示在一个 ListBox 中?
    答案:override 类的 ToString() 方法(这个方法在 Object 中就存在),然后 ListBox 类的 Add() 方法会自动调用类的 ToString()~~~~
Windows Forms Programming In C# 读书笔记 - 第八章 ControlsWindows Forms Programming In C# 读书笔记 - 第八章 Controlsclass  Person  {
Windows Forms Programming In C# 读书笔记 - 第八章 Controls  
string name;
Windows Forms Programming In C# 读书笔记 - 第八章 Controls  
int age;
Windows Forms Programming In C# 读书笔记 - 第八章 Controls
Windows Forms Programming In C# 读书笔记 - 第八章 ControlsWindows Forms Programming In C# 读书笔记 - 第八章 Controls  
public Person(string name, int age) {
Windows Forms Programming In C# 读书笔记 - 第八章 Controls    
this.name = name;
Windows Forms Programming In C# 读书笔记 - 第八章 Controls    
this.age = age;
Windows Forms Programming In C# 读书笔记 - 第八章 Controls  }

Windows Forms Programming In C# 读书笔记 - 第八章 Controls
Windows Forms Programming In C# 读书笔记 - 第八章 ControlsWindows Forms Programming In C# 读书笔记 - 第八章 Controls  
public override string ToString() {
Windows Forms Programming In C# 读书笔记 - 第八章 Controls    
return string.Format("{0} is {1} years old", Name, Age);
Windows Forms Programming In C# 读书笔记 - 第八章 Controls  }

Windows Forms Programming In C# 读书笔记 - 第八章 Controls}

Windows Forms Programming In C# 读书笔记 - 第八章 Controls
Windows Forms Programming In C# 读书笔记 - 第八章 ControlsWindows Forms Programming In C# 读书笔记 - 第八章 Controls
void  Form1_Load( object  sender, EventArgs e)  {
Windows Forms Programming In C# 读书笔记 - 第八章 ControlsWindows Forms Programming In C# 读书笔记 - 第八章 Controls  Person[] boys 
= new Person("Tom"7), new Person("John"8) };
Windows Forms Programming In C# 读书笔记 - 第八章 ControlsWindows Forms Programming In C# 读书笔记 - 第八章 Controls  
foreach( Person boy in boys ) {
Windows Forms Programming In C# 读书笔记 - 第八章 Controls    listBox1.Items.Add(boy);
Windows Forms Programming In C# 读书笔记 - 第八章 Controls  }

Windows Forms Programming In C# 读书笔记 - 第八章 Controls}

3。ListView 和 TreeView
Windows Forms Programming In C# 读书笔记 - 第八章 Controls// -------ListView
Windows Forms Programming In C# 读书笔记 - 第八章 ControlsWindows Forms Programming In C# 读书笔记 - 第八章 Controls
void  Form1_Load( object  sender, EventArgs e)  {
Windows Forms Programming In C# 读书笔记 - 第八章 ControlsWindows Forms Programming In C# 读书笔记 - 第八章 Controls  Person[] boys 
= new Person("Tom"7), new Person("John"8) };
Windows Forms Programming In C# 读书笔记 - 第八章 ControlsWindows Forms Programming In C# 读书笔记 - 第八章 Controls  
foreach( Person boy in boys ) {
Windows Forms Programming In C# 读书笔记 - 第八章 Controls    
// 假设listView1已经存在两列
Windows Forms Programming In C# 读书笔记 - 第八章 Controls
    ListViewItem item = new ListViewItem();
Windows Forms Programming In C# 读书笔记 - 第八章 Controls    item.Text 
= boy.Name;
Windows Forms Programming In C# 读书笔记 - 第八章 Controls    item.SubItems.Add(boy.Age.ToString());
Windows Forms Programming In C# 读书笔记 - 第八章 Controls    listView1.Items.Add(item);
Windows Forms Programming In C# 读书笔记 - 第八章 Controls  }

Windows Forms Programming In C# 读书笔记 - 第八章 Controls}

Windows Forms Programming In C# 读书笔记 - 第八章 Controls
// ---------TreeView
Windows Forms Programming In C# 读书笔记 - 第八章 ControlsWindows Forms Programming In C# 读书笔记 - 第八章 Controls
void  Form1_Load( object  sender, EventArgs e)  {
Windows Forms Programming In C# 读书笔记 - 第八章 Controls  TreeNode parentNode 
= new TreeNode();
Windows Forms Programming In C# 读书笔记 - 第八章 Controls  parentNode.Text 
= "Chris";
Windows Forms Programming In C# 读书笔记 - 第八章 Controls
Windows Forms Programming In C# 读书笔记 - 第八章 Controls  
// 先加根节点
Windows Forms Programming In C# 读书笔记 - 第八章 Controls
  treeView1.Nodes.Add(parentNode);
Windows Forms Programming In C# 读书笔记 - 第八章 Controls
Windows Forms Programming In C# 读书笔记 - 第八章 Controls  TreeNode childNode 
= new TreeNode();
Windows Forms Programming In C# 读书笔记 - 第八章 Controls  childNode.Text 
= "John";
Windows Forms Programming In C# 读书笔记 - 第八章 Controls
Windows Forms Programming In C# 读书笔记 - 第八章 Controls  
// 加一个子节点
Windows Forms Programming In C# 读书笔记 - 第八章 Controls
  parentNode.Nodes.Add(childNode);
Windows Forms Programming In C# 读书笔记 - 第八章 Controls}

4。DataGrid

    只要设置一下 DataSource 属性就可以了~~
Windows Forms Programming In C# 读书笔记 - 第八章 ControlsWindows Forms Programming In C# 读书笔记 - 第八章 Controlsvoid  Form1_Load( object  sender, EventArgs e)  {
Windows Forms Programming In C# 读书笔记 - 第八章 ControlsWindows Forms Programming In C# 读书笔记 - 第八章 Controls  Person[] boys 
= new Person("Tom"7), new Person("John"8) };
Windows Forms Programming In C# 读书笔记 - 第八章 Controls  dataGrid1.DataSource 
= boys;
Windows Forms Programming In C# 读书笔记 - 第八章 Controls}

5。List Item Selection

Windows Forms Programming In C# 读书笔记 - 第八章 Controls// ----------ListBox
Windows Forms Programming In C# 读书笔记 - 第八章 ControlsWindows Forms Programming In C# 读书笔记 - 第八章 Controls
void  listBox1_SelectedIndexChanged( object  sender, EventArgs e)  {
Windows Forms Programming In C# 读书笔记 - 第八章 Controls  
//得到选中的
Windows Forms Programming In C# 读书笔记 - 第八章 Controls
  object selection = listBox1.Items[listBox1.SelectedIndex];
Windows Forms Programming In C# 读书笔记 - 第八章 Controls  MessageBox.Show(selection.ToString());
Windows Forms Programming In C# 读书笔记 - 第八章 Controls
Windows Forms Programming In C# 读书笔记 - 第八章 Controls  
// 类型转化为原来的类型
Windows Forms Programming In C# 读书笔记 - 第八章 Controls
  Person boy = (Person)selection;
Windows Forms Programming In C# 读书笔记 - 第八章 Controls  MessageBox.Show(boy.ToString());
Windows Forms Programming In C# 读书笔记 - 第八章 Controls}

Windows Forms Programming In C# 读书笔记 - 第八章 Controls
// ----------TreeView
Windows Forms Programming In C# 读书笔记 - 第八章 ControlsWindows Forms Programming In C# 读书笔记 - 第八章 Controls
void  Form1_Load( object  sender, EventArgs e)  {
Windows Forms Programming In C# 读书笔记 - 第八章 Controls  TreeNode parentNode 
= new TreeNode();
Windows Forms Programming In C# 读书笔记 - 第八章 Controls  parentNode.Text 
= "Chris";
Windows Forms Programming In C# 读书笔记 - 第八章 Controls  parentNode.Tag 
= "000-00-0000"// 用Tag保存额外信息
Windows Forms Programming In C# 读书笔记 - 第八章 Controls
  treeView1.Nodes.Add(parentNode);
Windows Forms Programming In C# 读书笔记 - 第八章 Controls}

Windows Forms Programming In C# 读书笔记 - 第八章 Controls
Windows Forms Programming In C# 读书笔记 - 第八章 ControlsWindows Forms Programming In C# 读书笔记 - 第八章 Controls
void  treeView1_AfterSelect( object  sender, TreeViewEventArgs e)  {
Windows Forms Programming In C# 读书笔记 - 第八章 Controls  TreeNode selection 
= treeView1.SelectedNode;
Windows Forms Programming In C# 读书笔记 - 第八章 Controls  
object tag = selection.Tag; // 从Tag取出俄外信息
Windows Forms Programming In C# 读书笔记 - 第八章 Controls
  MessageBox.Show(tag.ToString());
Windows Forms Programming In C# 读书笔记 - 第八章 Controls}

    注意: List controls support either custom types or the Tag property but not both. However, a simple wrapper will allow you to add a tag to a list item of any type:

Windows Forms Programming In C# 读书笔记 - 第八章 Controls// ----------让任意类都可以有Tag
Windows Forms Programming In C# 读书笔记 - 第八章 ControlsWindows Forms Programming In C# 读书笔记 - 第八章 Controls
class  TaggedItem  {
Windows Forms Programming In C# 读书笔记 - 第八章 Controls  
public object Item;
Windows Forms Programming In C# 读书笔记 - 第八章 Controls  
public object Tag;
Windows Forms Programming In C# 读书笔记 - 第八章 Controls
Windows Forms Programming In C# 读书笔记 - 第八章 ControlsWindows Forms Programming In C# 读书笔记 - 第八章 Controls  
public TaggedItem(object item, object tag) {
Windows Forms Programming In C# 读书笔记 - 第八章 Controls    
this.Item = item;
Windows Forms Programming In C# 读书笔记 - 第八章 Controls    
this.Tag = tag;
Windows Forms Programming In C# 读书笔记 - 第八章 Controls  }

Windows Forms Programming In C# 读书笔记 - 第八章 Controls
Windows Forms Programming In C# 读书笔记 - 第八章 ControlsWindows Forms Programming In C# 读书笔记 - 第八章 Controls  
public override string ToString() {
Windows Forms Programming In C# 读书笔记 - 第八章 Controls    
return Item.ToString();
Windows Forms Programming In C# 读书笔记 - 第八章 Controls  }

Windows Forms Programming In C# 读书笔记 - 第八章 Controls}

Windows Forms Programming In C# 读书笔记 - 第八章 Controls
// ----------------
Windows Forms Programming In C# 读书笔记 - 第八章 ControlsWindows Forms Programming In C# 读书笔记 - 第八章 Controls
void  Form1_Load( object  sender, EventArgs e)  {
Windows Forms Programming In C# 读书笔记 - 第八章 Controls  
// Add two tagged strings
Windows Forms Programming In C# 读书笔记 - 第八章 Controls
  comboBox1.Items.Add(new TaggedItem("Tom""000-00-0000));
Windows Forms Programming In C# 读书笔记 - 第八章 Controls  comboBox1.Items.Add(
new TaggedItem("John""000-00-0000"));
Windows Forms Programming In C# 读书笔记 - 第八章 Controls}

Windows Forms Programming In C# 读书笔记 - 第八章 Controls
// -----------------
Windows Forms Programming In C# 读书笔记 - 第八章 ControlsWindows Forms Programming In C# 读书笔记 - 第八章 Controls
void  comboBox1_SelectedIndexChanged( object  sender, EventArgs e)  {
Windows Forms Programming In C# 读书笔记 - 第八章 Controls  TaggedItem selection 
=
Windows Forms Programming In C# 读书笔记 - 第八章 Controls    (TaggedItem)comboBox1.Items[comboBox1.SelectedIndex];
Windows Forms Programming In C# 读书笔记 - 第八章 Controls  
object tag = selection.Tag;
Windows Forms Programming In C# 读书笔记 - 第八章 Controls  MessageBox.Show(tag.ToString());
Windows Forms Programming In C# 读书笔记 - 第八章 Controls}