首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为ToolStripComboBox C#应用输入掩码

为ToolStripComboBox C#应用输入掩码
EN

Stack Overflow用户
提问于 2012-09-18 16:26:18
回答 2查看 2K关注 0票数 0

我只是想知道是否有人遇到过如何在C#中应用工具条组合框的输入掩码?

随着时间的推移,我的下拉框会被IP地址填充,我想限制用户能够写入的内容(Ex:只能输入3 '.'s,只有数字,等等)。

所以如果有人能帮忙的话,我会非常感激的!

提前谢谢。

编辑

我的设计已经改变了,所以我现在需要一个ToolStripComboBox

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-18 16:45:22

您可以尝试捕获KeyUp事件,然后检查输入是否有效。如果不恢复到最后一个有效输入。您可能希望对验证事件执行类似的操作(确保CausesValidation为真)。

另一个选项是创建一个MaskedTextBox并将其放置起来,这样它就覆盖了下拉菜单的文本框部分。然后,您需要将事件连接起来,以便两个窗体控件保持同步。

您还可以查看ErrorProvider类。

还有其他几种方法(比如永远运行.3秒的计时器),但它们通常是性能的主宰,或者很难维护。

正则表达式注释更新

如果要这样做,我可能使用正则表达式,或者手动解析字符串。无论哪种方式,KeyUp和验证事件都是我检查控件验证的地方。KeyUp事件为我提供了在输入时检查的选项,而验证事件允许我在控件失去焦点时进行验证。您所使用的内容将取决于您希望用户体验的内容。

如果不使用KeyUp事件进行验证,则可以添加一个计时器,该计时器在上一个键按下5秒后运行。这样,控件就不必失去焦点才能显示错误。

更新已编辑的问题和注释

您不能使用Format事件,因为您的问题是如何格式化用户输入,而不是如何将内容添加到列表中。因此,该解决方案不适用于ToolStripComboBoxComboBox

在阅读了http://msdn.microsoft.com/en-us/library/system.windows.forms.toolstripcontrolhost.aspx的文档之后,您可能能够将http://msdn.microsoft.com/en-us/library/system.windows.forms.toolstripcombobox.aspx转换为http://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.aspx。如果没有,则可以使用http://msdn.microsoft.com/en-us/library/system.windows.forms.toolstripcontrolhost.aspxhttp://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.aspx放置到表单上。-这是不正确或不必要的,请参阅下面的最新报价。

ToolStripControlHost是ToolStripComboBox、ToolStripTextBox和ToolStripProgressBar的抽象基类。ToolStripControlHost可以以两种方式承载其他控件,包括自定义控件:

  • 使用从Control派生的类构造ToolStripControlHost。若要完全访问宿主控件和属性,必须将control属性转换回它表示的实际类。
  • 扩展ToolStripControlHost,并在继承的类的默认构造函数中调用基类构造函数,传递从Control派生的类。此选项允许您包装通用控制方法和属性,以便于在ToolStrip中进行访问。

使用ToolStripControlHost类承载自定义控件或任何其他Windows控件。

若要自定义ToolStripItem,请从ToolStripControlHost派生并创建自定义实现。您可以重写OnSubscribeControlEvents等方法来处理托管控件引发的事件,还可以将自定义功能放入属性中以增强托管控件。

Update:根据ToolStripComboBox文档,您可以通过ToolStripComboBoxComboBox属性访问底层ComboBox

这就是为什么我通常在使用控件之前先阅读控件上的文档。我可能不明白,但至少我会知道该找什么。:)

票数 1
EN

Stack Overflow用户

发布于 2012-09-18 17:04:38

您应该创建这样的Format事件:

代码语言:javascript
复制
    private void comboBox1_Format(object sender, ListControlConvertEventArgs e)
    {
        e.Value = GetFullIpFormat((string)e.Value);
    }

下面是用于形成值的代码:

代码语言:javascript
复制
    string GetFullIpFormat(string value)
    {
        string[] ip = new string[4];
        for (int i = 0; i < ip.Length; i++)
        {
            ip[i] = GetIpPart(i, value);
        }
        return string.Format("{0:###}.{1:###}.{2:###}.{3:###}", ip[0], ip[1], ip[2], ip[3]);
    }

    string GetIpPart(int partNumber, string ip)
    {
        string result = "000";
        int iLen = 3;
        ip = ip.Replace(".", "");
        int iStart = partNumber * iLen;
        if (ip.Length > iStart)
        {
            result = ip.Substring(iStart);
            if (result.Length > iLen)
            {
                result = result.Substring(0, iLen);
            }
        }
        return result;
    }

这会为你安排好的。另外,您也可以检查同一事件的数字输入。这将为您完成这项工作,愉快的编码!:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12481145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档