C# 动态列表框,其中每个框都有DrawItem事件

C# 动态列表框,其中每个框都有DrawItem事件,c#,dynamic,listbox,event-handling,draw,C#,Dynamic,Listbox,Event Handling,Draw,我正在创建一个TabControl,它在每个动态创建的TabPage上都包含一个动态创建的列表框,每个列表框都有不同的内容。 对于每个列表框,我希望处理其中的文本(根据所示代码中不可见的状态更改其颜色) 目前,我正在使用一个类为特定列表框的文本着色,该类保存文本的颜色和将用于行的消息 用于手动创建的列表框的代码示例: private void listBoxLogs_DrawItem(object sender, DrawItemEventArgs e) { if

我正在创建一个TabControl,它在每个动态创建的TabPage上都包含一个动态创建的列表框,每个列表框都有不同的内容。 对于每个列表框,我希望处理其中的文本(根据所示代码中不可见的状态更改其颜色)

目前,我正在使用一个类为特定列表框的文本着色,该类保存文本的颜色和将用于行的消息

用于手动创建的列表框的代码示例:

    private void listBoxLogs_DrawItem(object sender, DrawItemEventArgs e)
    {
        if (e.Index < 0)
        {
            return;
        }

        ListBoxLogsItem item = listBoxLogs.Items[e.Index] as ListBoxLogsItem;
        if (item != null)
        {
            e.DrawBackground();

            e.Graphics.DrawString(item.m_message, listBoxLogs.Font, item.m_color, e.Bounds, System.Drawing.StringFormat.GenericDefault);

            System.Drawing.Graphics g = listBoxLogs.CreateGraphics();
            System.Drawing.SizeF s = g.MeasureString(item.m_message, listBoxLogs.Font);

            if (s.Width > listBoxLogs.HorizontalExtent)
            {
                listBoxLogs.HorizontalExtent = (int)s.Width + 2;
            }
        }
    }
我不知道如何识别调用DrawItemEventHandler“this.listBoxLogs\u DrawItem”的ListBox


有人能告诉我如何做到这一点,或者用另一种方法让我得到相同的结果吗?

发送方是引发您正在处理的事件的控件。在属性网格中创建处理程序时,所选控件是什么?列表框。这就是引发事件的控件

private void listBoxLogs_DrawItem(object sender, DrawItemEventArgs e)
{
    ListBox lbSender = (ListBox)sender;

    // ...other stuff
}

通常,在处理程序方法中插入断点,并在引发事件时在运行时检查参数。这总是一个快速了解这些事情的方法

sender
是引发您正在处理的事件的控件。在属性网格中创建处理程序时,所选控件是什么?列表框。这就是引发事件的控件

private void listBoxLogs_DrawItem(object sender, DrawItemEventArgs e)
{
    ListBox lbSender = (ListBox)sender;

    // ...other stuff
}

通常,在处理程序方法中插入断点,并在引发事件时在运行时检查参数。这总是一个快速了解这些事情的方法

我不知道你在问什么,但你可以通过引用或设置ListBox.Name来识别它们。你能说出你想用哪种方式识别他们吗?传递的参数“sender”是您的列表框。只需将它转换为ListBoxála
var anyListBox=(ListBox)发送方谢谢@Bagerfahrer这是我错过的东西。我不确定你在问什么,但你可以通过引用或设置ListBox.Name来识别它们。你能说出你想用哪种方式识别他们吗?传递的参数“sender”是您的列表框。只需将它转换为ListBoxála
var anyListBox=(ListBox)发送方谢谢@Bagerfahrer这是我错过的东西。谢谢@Ed我不知道为什么我没有调查发件人。。。我在手表中看到它的显示值是{SelectedItem=”“},我不认为它看起来像毛茸茸的。谢谢@Ed我不知道为什么我没有查看发件人。。。我看到它在手表中的显示值是{SelectedItem=”“},我不认为它看起来像毛茸茸的。