listview的问题 我在listview 中存放有数据,双击listview,弹出一个txt编辑框,将编辑框显示并把位置及大小控制在listview 选择的某列需要编辑处,当编辑框失去焦点时候,再把编辑里的内容保存在listview选择的该行指定可以修改列处(也就是双击的地方).. 再把数据存放到数据库里面..请求解决方案!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1、要有自己的数据类,2、填充listview时把Listviewitem的实例的tag赋值为你的数据类的实例,并用此实例的内存设置显示值3、当双击时,取得鼠标所在的位置,并显示你的编辑界面, private void Form1_Load(object sender, EventArgs e) { for (int i = 0; i != 100; i++) { listView1.Items.Add(new ListViewItem(new string[] { "1", "1", "1", "1", "1" })); } TextBox _TextBox = new TextBox(); _TextBox.Visible = false; _TextBox.Leave += new EventHandler(_TextBox_Leave); _TextBox.Multiline = true; _TextBox.BorderStyle = BorderStyle.None; listView1.Controls.Add(_TextBox); } void _TextBox_Leave(object sender, EventArgs e) { TextBox _TextBox = (TextBox)sender; if (_TextBox.Tag == null) return; ListViewItem.ListViewSubItem _SubItem = (ListViewItem.ListViewSubItem)_TextBox.Tag; _SubItem.Text = _TextBox.Text; _SubItem.Tag = null; _TextBox.Visible = false; } private void listView1_MouseUp(object sender, MouseEventArgs e) { ListView _ListView = (ListView)sender; if (_ListView.Controls.Count == 0) return; TextBox _TextBox = (TextBox)_ListView.Controls[0]; if (_TextBox.Tag != null)_TextBox_Leave(_TextBox, null); ListViewItem _Item = _ListView.GetItemAt(e.X, e.Y); if (_Item == null) return; Rectangle _Rect = _ListView.GetItemRect(listView1.Items.IndexOf(_Item)); int _Width = 0; int _ColumnIndex = 0; for (int i = 0; i != _ListView.Columns.Count; i++) { _Width += _ListView.Columns[i].Width; if (e.X < _Width) { _ColumnIndex = i; _Width -= _ListView.Columns[i].Width; break; } } _TextBox.Text = _Item.SubItems[_ColumnIndex].Text; _TextBox.Height = _Rect.Height; _TextBox.Width = _ListView.Columns[_ColumnIndex].Width; _TextBox.Tag = _Item.SubItems[_ColumnIndex]; _TextBox.Location = new Point(_Width, _Rect.Y); _TextBox.Visible = true; _TextBox.Font = _Item.SubItems[_ColumnIndex].Font; _TextBox.Focus(); } 写了下看样子不难 有个疑问 为什么不用dadaGridView呢? 因为listview里有一个checked 属性啊!!我可以通过它实现一些功能..我对datagridview 也不很会用.. 晕~~datagridView里有button check text image link combox ....而且编辑能指定到行或则列...而且输入错误有errorText 效果很不错的..你应该尝试用下. 哦 忘记加左右滚动条了 要用这个了 [DllImport("User32.dll")] private static extern int GetScrollPos(IntPtr ConvertIntPtr, int x);最终位置要- 这个获取的位置... int _Width = -GetScrollPos(_ListView.Handle, 0);改这行 Datagridview的动态录入到数据库 点击A窗体按钮,改变B窗体标题。 DevExpress方面的问题。 程序做安装程序,怎样让安装完后运行程序 一个转换的问题! 请教关于排列组合的问题! 手动清除对象? 又是索引超出!急啊 求:用C#做的奇迹外挂,分不够,再开贴 怎样能使一个窗体永远悬浮在另一个窗体之上 js 无法调用 webservice 上传图片插入记录的问题
2、填充listview时把Listviewitem的实例的tag赋值为你的数据类的实例,并用此实例的内存设置显示值
3、当双击时,取得鼠标所在的位置,并显示你的编辑界面,
{
for (int i = 0; i != 100; i++)
{
listView1.Items.Add(new ListViewItem(new string[] { "1", "1", "1", "1", "1" }));
}
TextBox _TextBox = new TextBox();
_TextBox.Visible = false;
_TextBox.Leave += new EventHandler(_TextBox_Leave);
_TextBox.Multiline = true;
_TextBox.BorderStyle = BorderStyle.None;
listView1.Controls.Add(_TextBox);
} void _TextBox_Leave(object sender, EventArgs e)
{
TextBox _TextBox = (TextBox)sender;
if (_TextBox.Tag == null) return;
ListViewItem.ListViewSubItem _SubItem = (ListViewItem.ListViewSubItem)_TextBox.Tag;
_SubItem.Text = _TextBox.Text;
_SubItem.Tag = null;
_TextBox.Visible = false;
} private void listView1_MouseUp(object sender, MouseEventArgs e)
{
ListView _ListView = (ListView)sender;
if (_ListView.Controls.Count == 0) return;
TextBox _TextBox = (TextBox)_ListView.Controls[0];
if (_TextBox.Tag != null)_TextBox_Leave(_TextBox, null);
ListViewItem _Item = _ListView.GetItemAt(e.X, e.Y);
if (_Item == null) return;
Rectangle _Rect = _ListView.GetItemRect(listView1.Items.IndexOf(_Item)); int _Width = 0;
int _ColumnIndex = 0;
for (int i = 0; i != _ListView.Columns.Count; i++)
{
_Width += _ListView.Columns[i].Width; if (e.X < _Width)
{
_ColumnIndex = i;
_Width -= _ListView.Columns[i].Width;
break;
}
}
_TextBox.Text = _Item.SubItems[_ColumnIndex].Text;
_TextBox.Height = _Rect.Height;
_TextBox.Width = _ListView.Columns[_ColumnIndex].Width;
_TextBox.Tag = _Item.SubItems[_ColumnIndex];
_TextBox.Location = new Point(_Width, _Rect.Y);
_TextBox.Visible = true;
_TextBox.Font = _Item.SubItems[_ColumnIndex].Font;
_TextBox.Focus(); }
写了下看样子不难
我对datagridview 也不很会用..
errorText 效果很不错的..你应该尝试用下.
private static extern int GetScrollPos(IntPtr ConvertIntPtr, int x);最终位置要- 这个获取的位置...