winform笔记

1.combobox 数据绑定

comboBox.DisplayMember = "需要读取的列1(name)"; //显示到comboBox的值
comboBox.ValueMember = "需要读取的列2(id)"; //comboBox真正的值
comboBox.DataSource = ds.Tables["虚拟列名"];//绑定数据源

2.FlowLayoutPanel支持鼠标滚轮滚动

FlowLayoutPanel控件不直接支持MouseWheel事件.即滚动滚轮也不会响应.所以必须手动来支持响应滚轮.
FlowLayoutPanel控件继承于Panel控件,Panel控件也是直接不支持MouseWheel事件
你可以添加MouseWheel事件,然后写上支持滚动的功能.也可以直接重写该控件.这样可以复用该控件.
如果只支持MouseWheel事件,还是不一定在滚动滚轮的时候,就能引发MouseWheel事件.所以,必须让鼠标停留在控件上时,让控件处于输入焦点状态.这是,滚动滚轮就可以引发MouseWheel事件了.

        //添加两个事件
        autoLayout.Click += AutoLayout_Click;
        autoLayout.MouseWheel += AutoLayout_MouseWheel;

        private void AutoLayout_Click(object sender, EventArgs e)
        {
            // 在点击事件中获取焦点
            autoLayout.Focus();
        }

        private void AutoLayout_MouseWheel(object sender, MouseEventArgs e)
        {
            if (e.Delta < 0)
            {
                if (this.VerticalScroll.Maximum > this.VerticalScroll.Value + 50)
                    this.VerticalScroll.Value += 50;
                else
                    this.VerticalScroll.Value = this.VerticalScroll.Maximum;
            }
            else
            {
                if (this.VerticalScroll.Value > 50)
                    this.VerticalScroll.Value -= 50;
                else
                {
                    this.VerticalScroll.Value = 0;
                }
            }
        }

3.ListViewItem和ListViewSubItem关系

                item.Text = i.TITLE;
                item.SubItems.Add(i.CONTENT);
                item.SubItems.Add(i.ID);
                // SubItems[0]=item.Text,取数据的时候要注意
                // content就是SubItems[1]

4.如何移除自身

控件的Parent方法可以拿到父控件

        private void Button_Click(object sender, EventArgs e)
        {
            Button button = (Button)sender;
            button.Parent.Controls.Remove(button);
        }

5.ListView的选中问题

            //在此处设断点,发现点击不同的Item后,此事件居然执行了2次 
            //第一次是取消当前Item选中状态,导致整个ListView的SelectedIndices变为0
            //第二次才将新选中的Item设置为选中状态,SelectedIndices变为1
            //如果不加listview.SelectedIndices.Count>0判断,将导致获取listview.Items[]索引超界的异常
            if (DataListView.SelectedIndices != null && DataListView.SelectedIndices.Count > 0)
            {
                ListView.SelectedIndexCollection c = DataListView.SelectedIndices;
                DataListView.Items[c[0]]或者DataListView.SelectedItems[0]
                // do sonmething
            }

6.comboBox__SelectedIndexChanged多次触发

参考下文
http://blog.csdn.net/ruiqi317/article/details/6857542

7.DataGridView清空数据

DataTable  dt  =  (DataTable)dataGridView1.DataSource;
dt.Rows.Clear();
dataGridView1.DataSource  =  dt;  

8.弹出自定义对话框,并传值

(1)自己实现获取数据的方法
在dialog中定义获取数据的方法

public String getValue(){
    return "aaa";
}

然后在调用dialog的主程序中如下调用

Dialog dlg = new Dialog();  
DialogResult dr = dlg.ShowDialog();  
string value = dlg.getValue();  

这肯定会令人产生疑问,因为对话框Form已经关闭了,怎么还能调用其函数???
其实,当窗体通过ShowDialog方法显示,并通过Close()函数进行关闭时,窗体资源不被释放。.可以参看MSDN:
http://msdn.microsoft.com/zh-cn/library/system.windows.forms.form.close.aspx

这样,主程序就获取了用户在自定义对话框的DialogResult值,以及用户的输入。

(2)解封装
主窗体定义一个类存放数据,这里仅用一个string代替
然后在dialog如下代码

this.DialogResult = DialogResult.OK;
Main mainForm = (Main)this.Owner;        //核心代码,将传递者解封装。
mainForm.str= "";                      //核心代码

然后主窗体

private String str;
......

DialogResult dialog_result = dialog.ShowDialog(this);//注意,这里的this是必须的。第一种方法this参数不是必须
if (dialog_result == DialogResult.OK)
{
    MessageBox.Show(str);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值