从组合框中删除边框

时间:2009-04-14 01:08:36

标签: c# controls

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

更具体地说,我有4个或5个电子邮件地址的列表,但我只希望一次显示一个,同时允许用户轻松选择不同的项目。我已经搜遍了所有但是找不到一种简单的方法来修改组合框的边框,并且一个边框少的组合框将很好地满足我的需求。

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

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

我可能只需添加一个显示备用地址列表的按钮,但是如果我可以从组合框中删除边框并完全具备我想要的内容,为什么要重新发明轮子呢? 感谢

3 个答案:

答案 0 :(得分:3)

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

然后,如果您将TextBox的AutoCompleteMode设置为“Append”,则用户将永远不会看到完整的电子邮件地址列表 - 他们只会在键入时填充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事件以“使用”所选的电子邮件地址。

答案 1 :(得分:1)

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

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

只需将DropDownStyle设为ComboBoxStyle.DropDownList

this.comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;

更新

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

this.comboBox1.DrawMode = DrawMode.OwnerDrawFixed;

这不会隐藏它,但会使其不那么明显。

答案 2 :(得分:0)

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

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

如果FlatStyle属性为Flat,则如果边框为1px,则可以使用数字进行播放。