zhuwt2008
zhuwt2008
采纳率95.1%
2018-05-24 16:24 阅读 818

如何改变ComboBox控件属性DefaultPadding的数值?

5

使用ComboBox(.NET WindowForm),控件中的文本与控件左边界特近,想改变一下,通常在其他控件,如TextBox中只需要设置Padding属性,但是奇怪的是ComboBox没有Padding属性,只有一个DefaultPadding属性,而且只读的,真令人抓狂啊,如何设置右边距呢?希望有告诉不啬赐教!感激不尽

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

6条回答 默认 最新

  • 已采纳
    caozhy 从今以后生命中的每一秒都属于我爱的人 2018-05-25 18:05

    完整代码:https://download.csdn.net/download/caozhy/10438740

    如果问题解决,麻烦点个采纳,谢谢。

    点赞 1 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2018-05-25 02:51

    不知道你说的是下拉的还是combobox的文本框的。因为操作系统层面没有支持,所以这个需要重绘实现。

    点赞 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2018-05-25 18:01

    图片说明

    点赞 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2018-05-25 18:01

    图片说明

    点赞 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2018-05-25 18:02
     using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace Q690118
    {
        class MyComboBox : System.Windows.Forms.ComboBox
        {
            public MyComboBox()
            {
                indent = 20;
                SetStyles();
            }
    
            protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
            {
                //base.OnPaint(e);
                e.Graphics.FillRectangle(SystemBrushes.Control, new Rectangle(e.ClipRectangle.X + 2, e.ClipRectangle.Y + 2, e.ClipRectangle.Width - 20, e.ClipRectangle.Height - 4));
                e.Graphics.DrawString(this.Text, this.Font, SystemBrushes.ControlText, new Rectangle(e.ClipRectangle.X + indent, e.ClipRectangle.Y + 4, e.ClipRectangle.Width - 20, e.ClipRectangle.Height - 8));
            }
    
            private void SetStyles()
            {
                SetStyle(ControlStyles.AllPaintingInWmPaint, true);
                SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
                SetStyle(ControlStyles.ResizeRedraw, true);
                SetStyle(ControlStyles.SupportsTransparentBackColor, true);
                UpdateStyles();
            }
    
            protected override void WndProc(ref Message m)
            {
                base.WndProc(ref m);
                if (m.Msg == 0xF || m.Msg == 0x133)
                {
                    OnPaint(new PaintEventArgs(this.CreateGraphics(), this.DisplayRectangle));
                }
            }
    
            public int indent { get; set; }
        }
    }
    
    
    点赞 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2018-05-25 18:02
     using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace Q690118
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                myComboBox1.Items.Add("111");
                myComboBox1.Items.Add("222");
                myComboBox1.Items.Add("333");
                myComboBox1.Text = "111";
            }
    
            private void numericUpDown1_ValueChanged(object sender, EventArgs e)
            {
                myComboBox1.indent = (int)numericUpDown1.Value;
                myComboBox1.Invalidate();
            }
        }
    }
    
    
    点赞 评论 复制链接分享

相关推荐