【问题标题】:Remove the border from a combobox从组合框中删除边框
【发布时间】:2010-10-19 06:14:35
【问题描述】:

我正在使用 C# 编写一个用于显示信息的表单,但我仍然需要允许对信息进行一些操作。我真正想做的是从组合框中删除边框,这将允许我显示信息,同时还允许用户选择集合中的其他项目而不必全部显示。

更具体地说,我有一个包含 4 或 5 个电子邮件地址的列表,但我只想一次显示一个,同时允许用户轻松选择不同的项目。我已经搜索了所有内容,但找不到修改组合框边框的简单方法,而无边框组合框将很好地满足我的需求。

我刚开始使用 C#,所以我还在学习,也许我错过了一些东西。看起来这应该比原来容易得多,希望有人可以帮助我。

编辑:
该表单使用标签来显示信息,因此中间有一个组合框会使其看起来很糟糕。基本上我正在寻找的是一个链接,单击该链接会打开默认电子邮件程序并填写地址,但我想要下拉按钮,以便可以选择备用地址。如果不需要,我不想显示大量的地址列表,我只想一次显示一个。类似于组合框,但没有边框。

我可能只添加一个显示备用地址列表的按钮,但如果我可以从组合框中删除边框并获得我正在寻找的内容,为什么还要重新发明轮子呢? 谢谢

【问题讨论】:

    标签: c# controls


    【解决方案1】:

    我知道这已经很晚了,但是我曾经不得不从组合框中删除边框,以便通过简单地为其分配一个新区域将其放入自定义用户控件中。 假设组合框的 FlatStyle 属性在 Standard 中具有 3px 边框,我们在新区域中删除该数量。例如:

    comboBox.Region = new Region(new Rectangle(3, 3, comboBox.Width - 3, comboBox.Height - 7));
    

    如果 FlatStyle 属性是 Flat,如果它有 1px 的边框,你可以玩弄数字。

    【讨论】:

      【解决方案2】:

      也许您根本不需要 ComboBox。假设您使用的是 Windows 窗体,您可以使用标准 TextBox 并将您的电子邮件地址列表添加到其 AutoCompleteCustomSource(并将 AutoCompleteSource 设置为“CustomSource”)。

      然后,如果您将 TextBox 的 AutoCompleteMode 设置为“附加”,用户将永远不会看到完整的电子邮件地址列表 - 他们只会在输入时在 TextBox 中填充关闭匹配。通过一些代码隐藏,您甚至可以引入使用向上和向下箭头键循环浏览可用项目的能力。

      编辑

      既然您已经更新了您的问题,我将建议一种完全不同的方法。

      添加“默认”电子邮件地址作为标准标签。哎呀 - 将其添加为 LinkLabel 并使其可点击,因此它的行为类似于网页上的 mailto: 链接。在该标签旁边,添加一个普通按钮。将其 FlatStyle 属性设置为“System”,将字体名称设置为“Marlett”,将标题设置为“u”,这样它就有一个漂亮的“下拉按钮”外观。

      现在将 ContextMenuStrip 添加到您的表单并为每个电子邮件地址添加一个菜单项。你可以很容易地在代码中做到这一点。

      现在为您的按钮添加此 Click 事件处理程序:

      private void button1_Click(object sender, EventArgs e)
      {
          contextMenuStrip1.Show(button1, new Point(0, button1.Height));
      }
      

      因此,当单击该按钮时,会弹出显示“备用”电子邮件地址的菜单。您需要做的就是捕捉菜单项的 Click 事件以“使用”选定的电子邮件地址。

      【讨论】:

      • 我希望用户能够从电子邮件列表中进行选择。我不想让他们输入,我假设他们不知道地址,这就是我要列出他们的原因。
      • 所以......你实际上想要一个标签旁边有一个小下拉箭头,它会弹出一个列表?
      • 这正是我想要的。但我认为与其创建这个,不如从组合框中删除边框,这将是一件好事和简单的事情。
      • 这是我的解决方法,我只是认为删除边框会更容易,但我想不是。谢谢。
      【解决方案3】:

      为什么需要ComboBox 是无边界的?对我来说没有多大意义。

      让你可以做的是只读ComboBox。您可以填充条目,用户将被允许选择它们,但不能输入任何文本。

      只需将DropDownStyle 设置为ComboBoxStyle.DropDownList

      this.comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
      

      更新:

      您可以尝试通过将DrawMode 设置为DrawMode.OwnerDrawFixed 来“隐藏”边框。

      this.comboBox1.DrawMode = DrawMode.OwnerDrawFixed;
      

      这不会隐藏它,但会降低它的可见度。

      【讨论】:

      • 它破坏了带有组合框的表单的外观和感觉。并不是我不想让用户在框中输入内容,我不想看到框。但是我确实想要组合框的功能。
      猜你喜欢
      • 2010-10-21
      • 2010-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多