listview的问题

kbtjh 2009-03-14 03:25:09
我在listview 中存放有数据,双击listview,弹出一个txt编辑框,将编辑框显示并把位置及大小控制在listview 选择的某列需要编辑处,当编辑框失去焦点时候,再把编辑里的内容保存在listview选择的该行指定可以修改列处(也就是双击的地方).. 再把数据存放到数据库里面..

请求解决方案!!!!
...全文
128 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
kbtjh 2009-03-14
  • 打赏
  • 举报
回复
应该怎么改呢..我还是不清楚哦.


.谢谢
zgke 2009-03-14
  • 打赏
  • 举报
回复
int _Width = -GetScrollPos(_ListView.Handle, 0);

改这行
zgke 2009-03-14
  • 打赏
  • 举报
回复
哦 忘记加左右滚动条了 要用这个了

[DllImport("User32.dll")]
private static extern int GetScrollPos(IntPtr ConvertIntPtr, int x);

最终位置要- 这个获取的位置...
kbtjh 2009-03-14
  • 打赏
  • 举报
回复
在利用到滚动条进行移动的时候,,获取时坐标并不是与实际相致的,,而是偏小的!!!

这是为什么??
kbtjh 2009-03-14
  • 打赏
  • 举报
回复
哦哦...谢谢你啦!!
在上面那里还有一些小小的问题:如果是进行流动的时候..它就会出现错误的!!
zgke 2009-03-14
  • 打赏
  • 举报
回复
晕~~datagridView里有button check text image link combox ....而且编辑能指定到行或则列...而且输入错误有
errorText 效果很不错的..你应该尝试用下.
kbtjh 2009-03-14
  • 打赏
  • 举报
回复
因为listview里有一个checked 属性啊!!我可以通过它实现一些功能..
我对datagridview 也不很会用..
zgke 2009-03-14
  • 打赏
  • 举报
回复
有个疑问 为什么不用dadaGridView呢?
zgke 2009-03-14
  • 打赏
  • 举报
回复
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();

}


写了下看样子不难
ztenv 2009-03-14
  • 打赏
  • 举报
回复
1、要有自己的数据类,
2、填充listview时把Listviewitem的实例的tag赋值为你的数据类的实例,并用此实例的内存设置显示值
3、当双击时,取得鼠标所在的位置,并显示你的编辑界面,

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧