如何在Listview中添加numericUpDown,ComboBox等
来源:互联网 发布:西班牙语翻译软件知乎 编辑:程序博客网 时间:2024/03/29 07:05
刚在论坛看到有网友问到如何在ListView中添加numericUpDown控件,相信这个问题也是朋友遇到的问题吧,因此我就草草的写下这个控件供大家参考一下,也想和大家一起分享一下.本人也是一个学生,代码有不足之处也希望大家能提出更正,多多包涵!代码如下:
自定义MyListView组件.由于numericUpDown控件不是ListView控件的一部分,因此它并不会与ListView一起滚动,所以用一下代码来实现一起滚动功能.
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Windows.Forms;
namespace NumListView
...{
public partial class MyListView : System.Windows.Forms.ListView
...{
public MyListView()
...{
InitializeComponent();
}
public MyListView(IContainer container)
...{
container.Add(this);
InitializeComponent();
}
private const int WM_HSCROLL = 0x114;
private const int WM_VSCROLL = 0x115;
protected override void WndProc(ref Message msg)
...{
// 寻找WM_VSCROLL或WM_HSCROLL信息。
if ((msg.Msg == WM_VSCROLL) || (msg.Msg == WM_HSCROLL))
...{
// 将焦点移至ListView以便让numericUpDown失去焦点。
this.Focus();
}
// 将信息传递给默认的处理函数。
base.WndProc(ref msg);
}
}
}
using System.ComponentModel;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Windows.Forms;
namespace NumListView
...{
public partial class MyListView : System.Windows.Forms.ListView
...{
public MyListView()
...{
InitializeComponent();
}
public MyListView(IContainer container)
...{
container.Add(this);
InitializeComponent();
}
private const int WM_HSCROLL = 0x114;
private const int WM_VSCROLL = 0x115;
protected override void WndProc(ref Message msg)
...{
// 寻找WM_VSCROLL或WM_HSCROLL信息。
if ((msg.Msg == WM_VSCROLL) || (msg.Msg == WM_HSCROLL))
...{
// 将焦点移至ListView以便让numericUpDown失去焦点。
this.Focus();
}
// 将信息传递给默认的处理函数。
base.WndProc(ref msg);
}
}
}
下面是窗体的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace NumListView
...{
public partial class Form1 : Form
...{
private ListViewItem lvItem;
public Form1()
...{
InitializeComponent();
}
private void myListView1_MouseUp(object sender, MouseEventArgs e)
...{
// 取得列中被按下的项目。
lvItem = this.myListView1.GetItemAt(e.X, e.Y);
// 确认确实有一个项目被按下。
if (lvItem != null)
...{
// 取得被按下之项目的周框。
Rectangle ClickedItem = lvItem.Bounds;
// 检查此资料行是否已经完全被卷动至左侧之外。
if ((ClickedItem.Left + this.myListView1.Columns[0].Width) < 0)
...{
// 如果储存格在左侧之外无法看到则不做任何处理。
return;
}
// 检查此资料行是否部分被卷动至左侧之外。
else if (ClickedItem.Left < 0)
...{
// 确认此数据行是否已延伸至 ListView 的右侧之外。
if ((ClickedItem.Left + this.myListView1.Columns[0].Width) > this.myListView1.Width)
...{
// 将数据行的宽度设定成与 ListView 的宽度。
ClickedItem.Width = this.myListView1.Width;
ClickedItem.X = 0;
}
else
...{
// 储存格的右侧位于检视中。
ClickedItem.Width = this.myListView1.Columns[0].Width + ClickedItem.Left;
ClickedItem.X = 2;
}
}
else if (this.myListView1.Columns[0].Width > this.myListView1.Width)
...{
ClickedItem.Width = this.myListView1.Width;
}
else
...{
ClickedItem.Width = this.myListView1.Columns[0].Width;
ClickedItem.X = 2;
}
ClickedItem.Y += this.myListView1.Top;
ClickedItem.X += this.myListView1.Left;
// 将计算后的周框指派给 numericUpDown。
this.numericUpDown1.Bounds = ClickedItem;
// 设定 numericUpDown 的预设文字使其与被按下的项目相符合。
this.numericUpDown1.Text = lvItem.Text;
// 显示出 numericUpDown,并确保它位于最顶层且拥有焦点。
this.numericUpDown1.Visible = true;
this.numericUpDown1.BringToFront();
this.numericUpDown1.Focus();
}
}
private void numericUpDown1_Leave(object sender, EventArgs e)
...{
// 设定 ListView 项目的文字使其符合 numericUpDown。
lvItem.Text = this.numericUpDown1.Value.ToString();
// 将 numericUpDown 隐藏起来。
this.numericUpDown1.Visible = false;
}
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
...{
// 设定 ListView 项目的文字使其符合 numericUpDown。
lvItem.Text = this.numericUpDown1.Value.ToString();
// 将 numericUpDown 隐藏起来。
this.numericUpDown1.Visible = false;
}
private void numericUpDown1_KeyPress(object sender, KeyPressEventArgs e)
...{
// 确认使用者按下 ESC 键。
if (e.KeyChar == (char)(Keys.Escape))
...{
// 重设原始文字值并将 numericUpDown 隐藏起来。
this.numericUpDown1.Value =Convert.ToDecimal( lvItem.Text);
this.numericUpDown1.Visible = false;
}
// 确认使用者按下 ENTER 键。
else if (e.KeyChar == (char)(Keys.Enter))
...{
// 将 ComboBox 隐藏起来。
this.numericUpDown1.Visible = false;
}
}
private void Form1_Load(object sender, EventArgs e)
...{
// 将 ListView 控件设定成详细数据检视。
this.myListView1.View = View.Details;
// 设定当按一下项目便选取项目和它的所有子项目。
this.myListView1.FullRowSelect = true;
ColumnHeader columnheader;
ListViewItem lviewitem;
// 新增一些数据至 ListView 控件中。
lviewitem = new ListViewItem("10");
lviewitem.SubItems.Add("硬盘");
this.myListView1.Items.Add(lviewitem);
lviewitem = new ListViewItem("8");
lviewitem.SubItems.Add("内存");
this.myListView1.Items.Add(lviewitem);
lviewitem = new ListViewItem("25");
lviewitem.SubItems.Add("CPU");
this.myListView1.Items.Add(lviewitem);
// 建立数据行行首。
columnheader = new ColumnHeader();
columnheader.Text = "数量";
columnheader.Width = 140;
this.myListView1.Columns.Add(columnheader);
columnheader = new ColumnHeader();
columnheader.Text = "名称";
columnheader.Width = 300;
this.myListView1.Columns.Add(columnheader);
}
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace NumListView
...{
public partial class Form1 : Form
...{
private ListViewItem lvItem;
public Form1()
...{
InitializeComponent();
}
private void myListView1_MouseUp(object sender, MouseEventArgs e)
...{
// 取得列中被按下的项目。
lvItem = this.myListView1.GetItemAt(e.X, e.Y);
// 确认确实有一个项目被按下。
if (lvItem != null)
...{
// 取得被按下之项目的周框。
Rectangle ClickedItem = lvItem.Bounds;
// 检查此资料行是否已经完全被卷动至左侧之外。
if ((ClickedItem.Left + this.myListView1.Columns[0].Width) < 0)
...{
// 如果储存格在左侧之外无法看到则不做任何处理。
return;
}
// 检查此资料行是否部分被卷动至左侧之外。
else if (ClickedItem.Left < 0)
...{
// 确认此数据行是否已延伸至 ListView 的右侧之外。
if ((ClickedItem.Left + this.myListView1.Columns[0].Width) > this.myListView1.Width)
...{
// 将数据行的宽度设定成与 ListView 的宽度。
ClickedItem.Width = this.myListView1.Width;
ClickedItem.X = 0;
}
else
...{
// 储存格的右侧位于检视中。
ClickedItem.Width = this.myListView1.Columns[0].Width + ClickedItem.Left;
ClickedItem.X = 2;
}
}
else if (this.myListView1.Columns[0].Width > this.myListView1.Width)
...{
ClickedItem.Width = this.myListView1.Width;
}
else
...{
ClickedItem.Width = this.myListView1.Columns[0].Width;
ClickedItem.X = 2;
}
ClickedItem.Y += this.myListView1.Top;
ClickedItem.X += this.myListView1.Left;
// 将计算后的周框指派给 numericUpDown。
this.numericUpDown1.Bounds = ClickedItem;
// 设定 numericUpDown 的预设文字使其与被按下的项目相符合。
this.numericUpDown1.Text = lvItem.Text;
// 显示出 numericUpDown,并确保它位于最顶层且拥有焦点。
this.numericUpDown1.Visible = true;
this.numericUpDown1.BringToFront();
this.numericUpDown1.Focus();
}
}
private void numericUpDown1_Leave(object sender, EventArgs e)
...{
// 设定 ListView 项目的文字使其符合 numericUpDown。
lvItem.Text = this.numericUpDown1.Value.ToString();
// 将 numericUpDown 隐藏起来。
this.numericUpDown1.Visible = false;
}
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
...{
// 设定 ListView 项目的文字使其符合 numericUpDown。
lvItem.Text = this.numericUpDown1.Value.ToString();
// 将 numericUpDown 隐藏起来。
this.numericUpDown1.Visible = false;
}
private void numericUpDown1_KeyPress(object sender, KeyPressEventArgs e)
...{
// 确认使用者按下 ESC 键。
if (e.KeyChar == (char)(Keys.Escape))
...{
// 重设原始文字值并将 numericUpDown 隐藏起来。
this.numericUpDown1.Value =Convert.ToDecimal( lvItem.Text);
this.numericUpDown1.Visible = false;
}
// 确认使用者按下 ENTER 键。
else if (e.KeyChar == (char)(Keys.Enter))
...{
// 将 ComboBox 隐藏起来。
this.numericUpDown1.Visible = false;
}
}
private void Form1_Load(object sender, EventArgs e)
...{
// 将 ListView 控件设定成详细数据检视。
this.myListView1.View = View.Details;
// 设定当按一下项目便选取项目和它的所有子项目。
this.myListView1.FullRowSelect = true;
ColumnHeader columnheader;
ListViewItem lviewitem;
// 新增一些数据至 ListView 控件中。
lviewitem = new ListViewItem("10");
lviewitem.SubItems.Add("硬盘");
this.myListView1.Items.Add(lviewitem);
lviewitem = new ListViewItem("8");
lviewitem.SubItems.Add("内存");
this.myListView1.Items.Add(lviewitem);
lviewitem = new ListViewItem("25");
lviewitem.SubItems.Add("CPU");
this.myListView1.Items.Add(lviewitem);
// 建立数据行行首。
columnheader = new ColumnHeader();
columnheader.Text = "数量";
columnheader.Width = 140;
this.myListView1.Columns.Add(columnheader);
columnheader = new ColumnHeader();
columnheader.Text = "名称";
columnheader.Width = 300;
this.myListView1.Columns.Add(columnheader);
}
}
}
如果程序有什么不足之处,希望能帮我指出和更正!!!!
我把以上程序打包成RAR http://dl2.csdn.net/down4/20070817/17152200606.rar
- 如何在Listview中添加numericUpDown,ComboBox等
- 在 DataGridColumnStyle 的单元格中使用 DateTimePicker、ComboBox、NumericUpDown 等控件
- c# ListView中添加Combobox等控件示例
- 在ArcGisEngine 开发中如何在Toolbar控件上添加Combobox等其他控件
- 如何在DataGrid中添加ComboBox的方法
- comboBox,listview,DataGridView中添加Item
- 如何在ListView中添加CheckBox
- winfrom如何在listview中添加控件
- C#中如何获取numericUpDown中的数字
- 工具栏中添加combobox等edit control(sdk)
- 如何在WORDPRESS中添加CNZZ等统计代码
- 如何在myeclipse中添加作者时间等信息
- 在ViewPager中添加ListView
- 如何在listview中添加button,使得listview item 和 button获取焦点不冲突
- Datagrid 中添加ComboBox
- C#中如何为ComboBox添加key-value对
- 在Winform窗口中为DataGridview单元格添加ComboBox
- easyui在datagrid的toolbar中添加下拉框combobox
- [C]整形数直接赋给指针作为地址
- 常用句柄类型及其说明
- CORBA应用中初始化ORB的重要性
- Session说明
- 菜菜的老家
- 如何在Listview中添加numericUpDown,ComboBox等
- 人生致命的八个经典问题
- size_t 和 ssize_t
- sleep() 和 wait() 的区别
- 窗口自动上升
- LFS中用户登录脚本、xinit与xdm启动应用程序(输入法)的快速设置
- SubVersion安装和使用系列文章之一:下载安装篇
- Acegi 的配置(1)-web.xml
- 很cool有背景的超链接效果