winform listview 的问题

jerry_zuo 2009-05-07 11:37:54
listview 给每一个item里面怎么添加一个button 啊 ?
就像reapter里面的模板列添加button 一样的效果,NND,winform N久没整过了,各位指教一下。
...全文
266 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cheng_er 2009-05-07
  • 打赏
  • 举报
回复
gridview是能填的
listview没填过,嘿,帮顶
jerry_zuo 2009-05-07
  • 打赏
  • 举报
回复
汗,都没人说一句话。
是不是问错了,WINFORM 我不熟悉,各位有什么说什么 我汗。
jerry_zuo 2009-05-07
  • 打赏
  • 举报
回复
???????????
是问题 太简单了? 没人?
marvelstack 2009-05-07
  • 打赏
  • 举报
回复
这个需要自己写代码,codeProject类似代码不少,楼主可以参考下的文章,
http://www.codeproject.com/KB/list/EXListView.aspx

http://www.codeproject.com/KB/list/ListViewEmbeddedControls.aspx
蓝海D鱼 2009-05-07
  • 打赏
  • 举报
回复
蓝海D鱼 2009-05-07
  • 打赏
  • 举报
回复
蓝海D鱼 2009-05-07
  • 打赏
  • 举报
回复
你可以自己 继承Listview进行 扩展


using System;
using System.Drawing;
using System.Windows.Forms;


//msg=0x115 (WM_VSCROLL)
//msg=0x114 (WM_HSCROLL)
/// <summary>
/// CListView 的摘要说明。
/// </summary>
public class CListView : ListView
{
private TextBox m_tb;

public CListView()
{
m_tb = new TextBox();
m_tb.Multiline = true;
m_tb.Visible = false;
this.GridLines = true;
this.CheckBoxes = true;
this.FullRowSelect = true;
this.Controls.Add(m_tb);
}
private void EditItem(int Index)
{
if (this.SelectedItems.Count <= 0)
{
return;
}
ListViewItem item = this.SelectedItems[0];
Rectangle rect = item.Bounds;
Rectangle _rect = new Rectangle(rect.Right - this.Columns[Index].Width, rect.Top, this.Columns[Index].Width, rect.Height);
m_tb.Bounds = _rect;
m_tb.BringToFront();
m_tb.Text = item.SubItems[1].Text;
m_tb.Leave += new EventHandler(tb_Leave);
m_tb.TextChanged += new EventHandler(m_tb_TextChanged);
m_tb.Visible = true;
m_tb.Tag = item;
m_tb.Select();
}

protected override void OnKeyDown(KeyEventArgs e)
{
if (e.KeyCode == Keys.F2)
{
EditItem(1);
}
base.OnKeyDown(e);
}

protected override void OnSelectedIndexChanged(EventArgs e)
{
this.m_tb.Visible = false;
base.OnSelectedIndexChanged(e);
}

protected override void OnDoubleClick(EventArgs e)
{
Point tmpPoint = this.PointToClient(Cursor.Position);
ListViewItem item = this.GetItemAt(tmpPoint.X, tmpPoint.Y);
if (item != null)
{
if (tmpPoint.X > this.Columns[0].Width && tmpPoint.X < this.Width)
{
EditItem(1);
}
}

base.OnDoubleClick(e);
}

protected override void WndProc(ref Message m)
{
if (m.Msg == 0x115 || m.Msg == 0x114)
{
this.m_tb.Visible = false;
}
base.WndProc(ref m);
}

private void tb_Leave(object sender, EventArgs e)
{
m_tb.TextChanged -= new EventHandler(m_tb_TextChanged);
(sender as TextBox).Visible = false;
}

private void m_tb_TextChanged(object sender, EventArgs e)
{
if ((sender as TextBox).Tag is ListViewItem)
{
(this.m_tb.Tag as ListViewItem).SubItems[1].Text = this.m_tb.Text;
}
}
}

kxfzly 2009-05-07
  • 打赏
  • 举报
回复
ListView好像是不能,不过可以自己继承一下
用DataGridView就可以啊
jerry_zuo 2009-05-07
  • 打赏
  • 举报
回复
顶上去。

110,549

社区成员

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

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

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