`
sjk2013
  • 浏览: 2185182 次
文章分类
社区版块
存档分类
最新评论

Winform Panel按钮位置

 
阅读更多

1、Panel上设置某个按钮居中

 this.btnExit.Location = new System.Drawing.Point(pnlButton.Width / 2, pnlButton.Height / 2);

2、Panel上多个按钮自动排序

原始状态:


调整顺序的代码:

        /// <summary>
        /// 设置按钮显示位置
       /// </summary>
       /// <param name="targetPanel">要设置按钮的Panel</param>
       /// <param name="buttonSpace">按钮之间的间隔</param>
        public void SetButtonCenter(Panel targetPanel, int buttonSpace)
        {
            int length = 0;
            List<Button> listBtn = new List<Button>();
            System.Windows.Forms.Control.ControlCollection c = targetPanel.Controls;
            foreach (Button btn in c)
            {
                listBtn.Add(btn);
                length += btn.Width + buttonSpace;
            }
            int pnlLength = targetPanel.Width;
            if (length > pnlLength) //本身按钮的长度总和大于了panel的长度,不调整
                return;
            int startPos = (pnlLength - length) / 2 - 10; //左缩进10个点位
            int yPos = targetPanel.Height / 2;
            int xPos = startPos;
            foreach (Button btn in listBtn)
            {
                btn.Location = new System.Drawing.Point(xPos, yPos);
                xPos += btn.Width + buttonSpace;
            }
        }

初步调整后的样子:

注意奥亲,按钮顺序是反向的!

那么怎么让按钮顺序正确呢?

代码如下:

private void Form1_Load(object sender, EventArgs e)
        {
            SetButtonCenter(panelTest, 2);
        }
        /// <summary>
        /// 设置按钮显示位置
        /// </summary>
        /// <param name="pnlButton">需要调整按钮顺序的Panel</param>
        /// <param name="buttonSpace">按钮间隔</param>
        public void SetButtonCenter(Panel targetPanel,int buttonSpace)
        {
            int length = 0;
            List<Button> listBtn = new List<Button>();
            System.Windows.Forms.Control.ControlCollection c = targetPanel.Controls;
            foreach (Button btn in c)
            {
                listBtn.Add(btn);
                length += btn.Width + buttonSpace;
            }
            int pnlLength = targetPanel.Width;
            if (length > pnlLength) //本身按钮的长度总和大于了panel的长度,不调整
                return;
            int startPos = (pnlLength - length) / 2 - 10; //左缩进10个点位
            int yPos = targetPanel.Height / 2;
            int xPos = startPos;
            listBtn.Sort(new ButtonSort());
            foreach (Button btn in listBtn)
            {
                btn.Location = new System.Drawing.Point(xPos, yPos);
                xPos += btn.Width + buttonSpace;
            }
        }
        public class ButtonSort : IComparer<Button>
        {
            #region IComparer<Button> Members
            //IComparer<T> 接口:定义类型为比较两个对象而实现的方法。
            public int Compare(Button x, Button y)
            {
                if (x.TabIndex >= y.TabIndex)
                    return 1;
                else
                    return -1;
            }
            #endregion
        }
此时的效果如下图:



分享到:
评论

相关推荐

    winform panel 绘制边框阴影

    winform panel 绘制边框阴影 ,可以设置具体显示哪个边框的阴影。 static Image shadowDownRight = new Bitmap(typeof(ShadowPanel), "Images.tshadowdownright.png");//下右 static Image shadowDown = new ...

    C# winform 透明Panel

    C# winform 透明Panel ,可以当一个隐藏的按钮使用,写个关闭程序的功能,或者其他功能

    Winform去掉最大化最小化关闭按钮

    Winform去掉最大化最小化关闭按钮(不是关闭按钮变灰),只此一家,自己看效果

    winform中的panel使用.docx

    5、我们在拖动单个Panel控件的时候,它内部的控件也会随着移动,以保持和Panel的相对位置不变。同理,删除Panel控件时,它所包含的所有控件也会被删除掉。 6、当我们调整Panel控件所包含的控件的Anchor和Dock属性的...

    C# Winform遍历控件(窗体、Panel的子控件)Controls

    C# Winform遍历控件(窗体、Panel的子控件)Controls ,适合在桌面应用程序中快速上手及运用

    C# WinForm 窗体中控件的大小自适应

    下载后解压缩即可运行使用,代码...3.为窗体添加SizeChanged事件,并在其方法Form1_SizeChanged中,首次记录窗体和其控件初始位置和大小,之后调用类的自适应方法,完成自适应。 4.Panel,DataGridView等控件同样适用。

    winform 实现屏幕(字幕)上下滚动(来回滚动)

    winform实现窗体界面 字幕上下来回滚动。可随意控制显示内容的大小,可随意控制窗体界面大小。代码简单易懂。这里是用的.NET 4.0版本,如果你只安装别这个更低的版本,只需要把代码用记事本打开,copy代码,就行了 ...

    C# winform 子窗体调用父窗体函数实现关闭该窗体打开另一个窗体

    C# winform 子窗体调用父窗体函数实现...在父窗体分From1内嵌一个panel1,在panel1里载入From2,点击在子窗体From2中的按钮,清除panel1里的From2,新载入From3,点击在子窗体From3中的按钮,panel1清除,重新载入From2

    Winform自定义组件库

    资源为Winform用户自定义组件库,是自己平时做项目...改库包含了常用的,按钮,圆角按钮,复选框,单选框,滚动条,带标题的Panel,Label,圆角窗口等等,基本项目用到的组件覆盖完了,能够实现一个软件的扁平化设计。

    C#中winform画直线

    C#中画直线,按确定按钮,可以按照预定的路线,画一条直线。

    Timer控件定时更新UpdatePanel - Demo

    提供免费下载 Timer控件定时更新UpdatePanel - DemoVS2010版.zip

    Winform 界面设计 视频教程

    WinForm窗体 Button 按钮 Textbox 文本框 ComboBox 下拉列表框 Checkbox 复选框 RadioButton 单选框 GroupBox 分组控件 Label 标签 ListBox 列表框 PictureBox 图片框 DateTimePicker 日期时间控件 ...

    C# Winform窗体内嵌入第三方应用窗体源码,可自适应容器大小

    Winform实现窗体内嵌入第三方应用窗体,只需要知道窗体名称,即可将第三方应用的窗体嵌入到自己的程序中,使用WinForm的Panel控件作为其父容器,并且第三方窗体仍然保持原有的功能,如点击,输入等,可以随着自己的...

    winform触摸屏事件小例子

    通过鼠标点击事件控制panel的自动滚动条移动,实现在触摸屏上的手指拖动效果

    Winform ToolStrip控件左右拖拽移动效果实现

    * 主窗体下部添加一个Panel乘放ToolStrip控件以实现ToolStrip在窗体下部定位。 * 当ToolStrip控件中子控件超出屏幕时,拖动控件可以实现滑动效果。拖动到控件边缘距窗体边缘1/3宽度时(可设), 自动回弹。拖动...

    DOTNET-C# winform常用控件的测试源码

    DOTNET_C# winform常用控件的使用,在一个winform界面演示了常用控件的操作,非常适合初学者使用,编程老手也可以用来做备忘用。源码内容包括: 1.button按钮控件 2.Label控件 3.TextBox 控件 4.RichTextBox 控件 5....

    C# Winform按钮中图片实现左图右字的效果实例

    需要注意的点 最好事先知道你需要的按钮的大小,比如我需要把button放入到size高度为40px的panel中,则你的图片最好像素值35以下,不然会出现图片超过边框的效果;如果要将设计好的按钮放置到容器内,需考虑到容器...

    C#中的WinForm组件的简单使用(包含详细教程)

    使用容器(如Panel)来组织控件,或者使用布局管理器(如FlowLayoutPanel、TableLayoutPanel)来自动调整控件的大小和位置。 编写事件处理程序: 为组件添加事件处理逻辑。例如,为按钮(Button)添加点击事件...

    C# winform控件使用案例18种窗体使用案例【适合入门者学习使用】

    C# winform控件使用案例18种窗体使用案例【适合入门者学习使用】,具体如下所示 01-窗体学习 02-TextBox文本框 03-Combobox 04-CheckBox 05-RadioButton单选按钮 06-Label标签 07-ListBox列表框 08-PictureBox图片框...

    C# DataGridView单元格中动态添加多个控件

    C# DataGridView单元格中动态添加多个控件。开发环境VS2012。

Global site tag (gtag.js) - Google Analytics