You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WinForms中如何实现带下拉箭头点击展开的扩展文本框控件?

实现方案说明

你要的这个控件WinForms原生控件库没有直接提供开箱即用的版本,有两种常见实现方式:

方案1:自定义轻量实现(无需第三方依赖)

核心思路是组合原生控件+弹出层实现,步骤如下:

  • 基础控件部分:在窗体上放置一个TextBox,右侧紧邻放一个宽度很窄的Button,按钮Text设为下拉箭头「▼」,调整两个控件的位置让它们看起来是一个整体
  • 弹出层部分:使用ToolStripDropDown作为弹出容器,在容器内部放置你需要的扩展TextBox(或者其他自定义内容)
  • 交互逻辑:给下拉按钮加点击事件,点击时在按钮下方位置显示ToolStripDropDown,扩展文本框输入完成后可以监听焦点离开事件自动收起弹出层,也可以加确认按钮手动收起

这种方式完全基于原生控件实现,不需要引入额外依赖,适配性高。核心代码示例如下:

// 初始化弹出层和扩展文本框
private ToolStripDropDown _dropDown;
private TextBox _extendedTextBox;

private void Form1_Load(object sender, EventArgs e)
{
    // 初始化扩展文本框
    _extendedTextBox = new TextBox
    {
        Multiline = true,
        Size = new Size(200, 100),
        BorderStyle = BorderStyle.None
    };
    
    // 把扩展文本框包装到ToolStripControlHost中适配弹出层
    var host = new ToolStripControlHost(_extendedTextBox);
    _dropDown = new ToolStripDropDown
    {
        AutoSize = false,
        Size = _extendedTextBox.Size,
        Padding = Padding.Empty
    };
    _dropDown.Items.Add(host);
}

// 下拉按钮点击触发弹出
private void dropDownBtn_Click(object sender, EventArgs e)
{
    _dropDown.Show(dropDownBtn, new Point(0, dropDownBtn.Height));
}

方案2:使用第三方UI控件库

如果你项目中已经引入了第三方UI组件,可以直接使用封装好的成品控件:

  • DevExpress组件库的PopupContainerEdit控件,完全匹配你需要的效果,支持自定义弹出容器内的所有内容
  • ComponentOne库的C1DropDownControl也可以实现相同功能

内容的提问来源于stack exchange,提问作者עמית וינר

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 16:18:03