返回信息流我在程序中创建了一个UserControl UC,然后插入到一个ListBox中。ListBox里我设置了OwnerDrawFixed属性。
ListBox的DrawItem事件处理函数如下
void ListBox_DrawItem(caller, eventArgs)
{
if (eventArgs.Index > 0)
{
UC uc = (UC)listBox.Items[eventArgs.Index];
PaintEventArgs pea = new PaintEventArgs(eventArgs.Graphics, eventArgs.Bounds);
uc.draw(pea);
}
}
UC中draw方法如下:
void draw(PaintEventArgs Args)
{
OnPaint(Args);
}
奇怪的是在UC被加入ListBox后无法显示出来,而要是直接使用UC(而不是放到ListBox)中却又能正常显示。
请问一下正确应该怎么做,另外为什么上面的代码不能起到预期的效果?谢谢!
PS. 在DrawItem里面手工使用eventArgs.Graphics去画倒是可以显示出来,但是实际中UC里比较复杂,手工去画控件的话代价太大了。
这是一条镜像帖。来源:北邮人论坛 / dot-net / #2678同步于 2011/3/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
dotNET机器人发帖
[求助]问一个UserControl放到ListBox中的问题
FadeToBlack
2011/3/9镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
上代码
【 在 FadeToBlack (烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫*&^) 的大作中提到: 】
: 我在程序中创建了一个UserControl UC,然后插入到一个ListBox中。ListBox里我设置了OwnerDrawFixed属性。
: ListBox的DrawItem事件处理函数如下
: void ListBox_DrawItem(caller, eventArgs)
: ...................
ListBox的代码:
namespace UserControlTest
{
public partial class ListBoxContainer : UserControl
{
public ListBoxContainer()
{
InitializeComponent();
}
public void add(ItemToAdd Item)
{
listBox.Items.Add(Item);
}
private void listBox_DrawItem(object sender, DrawItemEventArgs e)
{
if (e.Index >= 0)
{
ItemToAdd item = (ItemToAdd)listBox.Items[e.Index];
if (item != null)
{
item.draw(new PaintEventArgs(e.Graphics, e.Bounds));
}
}
}
}
}
----------------------------------------------------------------------------------------------
向ListBox中添加的UserControl代码
namespace UserControlTest
{
public partial class ItemToAdd : UserControl
{
public ItemToAdd()
{
InitializeComponent();
}
public ItemToAdd(string Text)
{
InitializeComponent();
button.Text = Text;
}
public void draw(PaintEventArgs Args)
{
OnPaint(Args);
}
private void ItemToAdd_Paint(object sender, PaintEventArgs e)
{
int a = 1;
a++;
}
}
}
---------------------------------------------------------------------
代码见上或附件
附件(19.1KB) ListBoxTest.zip
日了,怎么就会不行?这是ListBox的问题还是.NET的问题……
http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/9721308d-52f8-430b-aad6-69661c18d5f1