返回首页

简介
我已经看到了很多创造性的方式来使一个组合框只读。我发现做最好的办法是创建组合框,在里面你改变的dropdownstyle简单,然后捕获所有击键ExtenderProvider。
我发现它很有用同样的原因,我喜欢用一个TextBox只读一个ComboBox设置为ReadOnly。
即以:保持背景色白色,而不是禁用灰色让我的用户复制文字组合框(禁用不允许复制)保持一个关联的工具提示启用(禁用组合框也将禁用相关联的工具提示)背景
这段代码是基于IExtenderProvider接口。您可能需要向Google!本文还假定你已经知道了一些有关陷阱击键和使用哈希表。兴趣点
IExtenderProvider可以被用来在各种情况一样,被困在一个TextBox控制按键。看以后的文章中,我将展示该技术的一个例子。使用代码
后添加ReadOnlyComboProvider类,你需要重建的项目。然后,只需从工具箱拖动其中一个到窗体上并设置属性通过属性窗口或通过代码。
通过代码设置ReadOnly属性,你会做一些事情,如:

Me.ReadOnlyComboProvider1.SetReadOnly(myComboBox, True)
下面的代码为ExtenderProvider:{C}历史08年5月22日 - 首版发布。

回答

评论会员:djyule 时间:2011/12/16
大供应商。不过,我似乎要设置只读后,能够选择和删除字符在我的组合框的文本框部分。我的用户导致一些混乱... ...任何建议,以使其真正读只

再次感谢,
评论会员:Roefes 时间:2011/12/16
?良好的工作,但我仍然可以改变选定的值,使用向上/向下箭头
{S0}
评论会员:AndrusM 时间:2011/12/16
我添加的代码

protected override void OnKeyDown(KeyEventArgs e)

        {

            if (IsReadOnly && ((e.KeyCode == Keys.Up || e.KeyCode == Keys.Down || e.KeyCode == Keys.F4) ||

                (DropDownStyle == ComboBoxStyle.DropDownList && (e.KeyCode == Keys.Left || e.KeyCode == Keys.Right))))

                e.Handled = true;

 

            base.OnKeyDown(e);

        }

 



        protected override void WndProc(ref Message m)

        {

            if (m.Msg == 0x201) //WM_LBUTTONDOWN || m.Msg == 0x203)  //WM_LBUTTONDBLCLK

            {

                if (IsReadOnly)

                    return;

            }

            base.WndProc(ref m);

        }

 


如何让用户打开下拉列表F4或鼠标点击,但禁用列表中通过鼠标的选择吗?

安德鲁斯
评论会员:MojtabaVALI 时间:2011/12/16
垃圾邮件删除