遗憾迟香 发表于 2021-11-8 15:14

[Winform]另类的透明ComboBox

我们在做窗体美化时,不希望控件遮挡窗体背景不是所有winform控件都支持透明背景,比如TextBox,ComboBox,ListBox等
网上有方法实现TextBox透明,但ComboBox透明貌似没有教程




下面我们来用组合控件来实现透明ComboBox功能
添加两个Button,FlatStyle改为Flat,BackColor改为Transparent

修改Margin属性为0,使两个按钮拼在一起,将第二个按钮文字改为▽

添加一个ContextMenuStrip用来显示下拉框
添加项的方法如下:
contextMenuStrip1.Items.Add(new ToolStripMenuItem("a"));
            contextMenuStrip1.Items.Add(new ToolStripMenuItem("b"));
            contextMenuStrip1.Items.Add(new ToolStripMenuItem("c"));
            contextMenuStrip1.Items.Add(new ToolStripMenuItem("d"));
两个按钮同时添加Click事件
      private void button2_Click(object sender, EventArgs e)
      {
            contextMenuStrip1.Show(button1, new Point(0, button1.Size.Height));
      }

在添加完项目之后添加事件
      private void Form1_Load(object sender, EventArgs e)
      {
            contextMenuStrip1.Items.Add(new ToolStripMenuItem("a"));
            contextMenuStrip1.Items.Add(new ToolStripMenuItem("b"));
            contextMenuStrip1.Items.Add(new ToolStripMenuItem("c"));
            contextMenuStrip1.Items.Add(new ToolStripMenuItem("d"));
//显示文本可用Text属性,隐藏内容可用Tag属性
            foreach (ToolStripMenuItem item in contextMenuStrip1.Items)
            {
                item.Click += new EventHandler(AddItem);
            }
      }

      private void AddItem(object sender, EventArgs e)
      {
            ToolStripMenuItem t = sender as ToolStripMenuItem;
            button1.Text = t.Text;
            button1.Tag = t.Tag;
      }
就可以实现ComboBox功能,并且不遮挡窗体背景


wang65424773 发表于 2021-11-17 12:54

这个模式能够看出来是contextMenuStrip,显示出来的部分有个区分线(contextMenuStrip的前端可以设定Icon的位置)
页: [1]
查看完整版本: [Winform]另类的透明ComboBox