Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 触发自定义组合的ondrawitem事件_C# - Fatal编程技术网

C# 触发自定义组合的ondrawitem事件

C# 触发自定义组合的ondrawitem事件,c#,C#,如何发起ondraw活动 场景:我在表单中使用带有onDrawItem的自定义组合框。 这个项目就是这样 protected override void OnDrawItem(DrawItemEventArgs e) {... } Question: How do I make the custom combobox ComboLineStyle redraw 选定索引上的自身已更改为另一个CMBOxLineColor。最终,我需要一种方法来重新绘制每个s

如何发起ondraw活动 场景:我在表单中使用带有onDrawItem的自定义组合框。 这个项目就是这样

 protected override void OnDrawItem(DrawItemEventArgs e)
        {...

        }
Question: How do I make the custom combobox ComboLineStyle redraw 
选定索引上的自身已更改为另一个CMBOxLineColor。最终,我需要一种方法来重新绘制每个selectedindex上combobox的所有行 .

编辑 当另一个linecolorcombo中的颜色发生变化时,我需要下拉列表再次绘制自身。颜色

 lineColorSel = cmbBoxLineColor.SelectedValue;
ComboBoxItemLineStyle itemSolid = new ComboBoxItemLineStyle ("Solid Line", lineColorSel);  
我的LineStyleComboxItem中的color属性将具有linecolor组合的selectedvalue。因此,linestyle组合应该刷新/失效自身,并使用此lineColorSel重新绘制自身

谢谢

您可以对继承System.Windows.Forms.Control的任何对象调用Invalidate(),以强制其重新绘制

下面是我将如何为所选项目进行自定义绘制的示例

    protected override void OnDrawItem(DrawItemEventArgs e)
    {

        if (e.State == DrawItemState.Selected)
        {
            ...
        }
        else
        {
            ...
        }

        //or you could do it like this
        //if(e.Index == this.SelectedIndex)
        //{
        //}

        ...

    }

    protected override void OnSelectedIndexChanged(EventArgs e)
    {
        base.OnSelectedIndexChanged(e);
        base.Invalidate();
    }

当我失效/刷新ComboBoxItem item1Solid=new ComboxItem(“实线”,selectedIndex)时,如何将所选索引作为参数发送。然后使用selectedIndex重新绘制,您不必这样做。通过检查DrawItemEventArg.StateInvalidate/Refresh似乎没有重新绘制控件,可以判断OnDrawItem是否正在绘制选定项。即使他们有,他们也没有选定的项目。我不确定你是否正确回答了这个问题。在选择另一个linecolor组合时,这一个linestylecombo应该自我更新。因此,换言之,您希望有一个组合框,用户可以在其中选择颜色,并且您希望它能够更改其他组合框的线条颜色?那么,为什么不在“颜色更改”组合框中放置一个公共LineColor属性,以便在设置时也调用Invalidate/base.OnDraw。然后在MDRAW方法中获取线条颜色。
    protected override void OnDrawItem(DrawItemEventArgs e)
    {

        if (e.State == DrawItemState.Selected)
        {
            ...
        }
        else
        {
            ...
        }

        //or you could do it like this
        //if(e.Index == this.SelectedIndex)
        //{
        //}

        ...

    }

    protected override void OnSelectedIndexChanged(EventArgs e)
    {
        base.OnSelectedIndexChanged(e);
        base.Invalidate();
    }