C#窗体中按钮按照一定规则摆放位置的算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#窗体中按钮按照一定规则摆放位置的算法相关的知识,希望对你有一定的参考价值。

VS2010,代码实现将多个按钮添加到GroupBox控件中,使其按照流布局方式摆放而不是覆盖,应该如何写???并且获取当前GroupBox在窗体中的位置(x,y)和添加的按钮的位置信息(x,y)

private void Form1_Load(object sender, EventArgs e)

Button btn;
int y = 0;
int x = 0;
for (int i = 0; i < 10; i++)

btn = new Button();
if (x > groupBox1.Size.Width)

x = 0;
y += 30;

btn.Size = new Size(80, 30);
btn.Location = new Point(x, y);
x += 80;
MessageBox.Show(btn.Location.X.ToString()+","+ btn.Location.Y.ToString());
groupBox1.Controls.Add(btn);

MessageBox.Show(groupBox1.Location.X.ToString() + "," + groupBox1.Location.Y.ToString());

参考技术A 用WPF写吧,Grid、StackPanel、DockPanel这些布局吧

如何在c#中实现单击一个按钮后,再在窗体内点击一次鼠标,把该按钮移动到第二次点击的位置?

rt,新手求教。
private void button1_Click(object sender, EventArgs e)

//如何添加一次单击触发的事件?

参考技术A 楼上说的可以
具体点,在你的class From1中,构造函数上面加一个
bool isClick=false;
在button1_Click函数中
isClick=true;
为窗体添加一个Click响应消息
在From1_Click函数中
if(isClick)

button1.Location=new Point(e.X-button1.Size.Width/2,e.Y-button1.Size.Height/2);
isClick=false;
追问

方法可行,但是我实际上想继承一个带有这个功能的button怎么写?

追答

那样也行啊 就是在继承的类中加一个移动的方法,最终还是要在窗体的单击函数中调用这个方法,毕竟你点的是窗体,无法引起按钮的任何消息响应,只能引起窗体的单击消息

参考技术B 定义一个全局变量isClick=false
button1_Click里isClick=true
form_Click里
if isClick=true
按钮设置新位置
isClick=false追问

方法可行,但是我实际上想继承一个带有这个功能的button怎么写?这种方法不行。

追答

你的要求是点击窗体,按钮移动到点击的位置,这涉及到窗体和点击的位置
光靠button自身的属性是无法实现的

你可以继承一个button类,里面增加一个移动到新位置的方法
当点击form的时候调用这个方法

参考技术C winform中还是asp.net中?追问

windows form

追答public partial class Form1 : Form
    

        /// <summary>
        /// 是否可移动
        /// </summary>
        private Boolean IsMove = false;

        public Form1()
        
            InitializeComponent();
        

        private void Form1_MouseClick(object sender, MouseEventArgs e)
        
            if (e.Button == MouseButtons.Right || e.Button == MouseButtons.Left)
            
                Point p = MousePosition;//获取位置
                //其他需要执行的代码
                if (IsMove)
                
                    this.button1.Location = p;    
                
                
            
        

        private void button1_Click(object sender, EventArgs e)
        
            IsMove = true;
        
    

找到窗体的MouseClick事件,双击,在这个事件下,下 button移动的代码!

已试过,试的时候,请将窗体最大化!

以上是关于C#窗体中按钮按照一定规则摆放位置的算法的主要内容,如果未能解决你的问题,请参考以下文章

javafx窗体面板位置

详解使用C#制作不规则窗体的方法

C# winform中制作不规则透明窗体

C#创建不规则窗体的3种方式详解

C# 在windows form实现不规则窗体&透明窗体

第九章 数据关联规则分析算法——基于Apriori算法的关联项分析