C#控件移动的问题
1、有一个窗体FORM,它内有一个控件(比如btn),可以在运行时,用鼠标拖动btn任意移动,但是不能移出FORM的范围。2、右键菜单通过this.Controls.Ad...
1、有一个窗体FORM,它内有一个控件(比如btn),可以在运行时,用鼠标拖动btn任意移动,但是不能移出FORM的范围。
2、右键菜单通过this.Controls.Add()创建一个新控件,如何使它被创建在鼠标所在的位置(或者指定坐标)
谢谢!
最好写下简单代码,或者有例子,谢谢了!初学比较喜欢看着例子来 展开
2、右键菜单通过this.Controls.Add()创建一个新控件,如何使它被创建在鼠标所在的位置(或者指定坐标)
谢谢!
最好写下简单代码,或者有例子,谢谢了!初学比较喜欢看着例子来 展开
展开全部
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 WinFormTest
{
public partial class frmMain : Form
{
private Point Old, Now;
private int btnCount;
public frmMain()
{
InitializeComponent();
this.Old = new Point(this.btn.Left, this.btn.Top);
this.Now = new Point(this.btn.Left, this.btn.Top);
this.btnCount = 1;
}
private void btn_MouseDown(object sender, MouseEventArgs e)
{
this.Old = new Point(e.X, e.Y);
}
private void btn_MouseUp(object sender, MouseEventArgs e)
{
this.Now = new Point(e.X, e.Y);
if(this.Old!=this.Now)
{
this.btn.Left = this.btn.Left + this.Now.X - this.Old.X;
this.btn.Top = this.btn.Top + this.Now.Y - this.Old.Y;
}
}
private void frmMain_MouseClick(object sender, MouseEventArgs e)
{
Button x = new Button();
x.Text = "动态按钮" + this.btnCount.ToString();
x.Left = e.X;
x.Top = e.Y;
this.Controls.Add(x);
this.btnCount++;
}
}
}
追问
谢谢你,不过,我把你的代码粘过来运行了下,拖动和新建都没有成功,请问是我哪里没有设置好吗?locked是false。我的程序:主form,分为上中下三个panel,上是菜单,中是TAB,下是状态栏,都放在panel中DOCK是FILL,想要在TAB中通过单击菜单栏按钮来新建一个控件,且该控件可以拖动但不出TAB的范围。我现在的问题是新建了控件但是看不见,是不是有顺序问题?怎么修改呢?麻烦了。
展开全部
移动控件:
Point p0;
bool b = false;
private void button1_MouseDown(object sender, MouseEventArgs e)
{
//记录下鼠标位置坐标
p0 = new Point(e.X, e.Y);
//设置移动标志
b = true;
}
private void button1_MouseMove(object sender, MouseEventArgs e)
{
if (!b) return; //移动标志为false,退出
//移动
button1.Location = new Point(button1.Left -p0.X +e.Location.X ,button1.Top -p0.Y +e.Location.Y);
button1.Refresh();
}
private void button1_MouseUp(object sender, MouseEventArgs e)
{
//清除移动标志
b = false;
}
添加一个控件:
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
//在窗体上按下鼠标右键
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
Button btn = new Button();
btn.Text = "新加按钮";
this.Controls.Add(btn);
btn.Location = e.Location;
}
}
完整的代码
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Point p0;
bool b = false;
private void button1_MouseDown(object sender, MouseEventArgs e)
{
p0 = new Point(e.X, e.Y);
b = true;
}
private void button1_MouseMove(object sender, MouseEventArgs e)
{
if (!b) return;
button1.Location = new Point(button1.Left -p0.X +e.Location.X ,button1.Top -p0.Y +e.Location.Y);
button1.Refresh();
}
private void button1_MouseUp(object sender, MouseEventArgs e)
{
b = false;
}
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
//在窗体上按下鼠标右键
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
Button btn = new Button();
btn.Text = "新加按钮";
this.Controls.Add(btn);
btn.Location = e.Location;
}
}
}
}
更多追问追答
追问
谢谢你,不过,我把你的代码粘过来运行了下,拖动和新建都没有成功,请问是我哪里没有设置好吗?我的程序:主form,分为上中下三个panel,分别为上是菜单,中是一个TAB,下是状态栏,都放在panel中DOCK是FILL,想要在TAB中通过单击菜单栏某个按钮来新建一个控件,并且该控件可以任意拖动但不出TAB的范围。我现在的问题是新建了控件但是看不见,是不是INDEX的问题?怎么修改呢?麻烦了。
追答
上面的例子是一个窗体,窗体只有一个Button控件——button1;演示的是在窗体中移动、添加控件。其实Tab、Panel和窗体一样,都是容器类控件(可以容纳其他控件的控件)。在Tab或Panel中移动、添加控件,与在Form中是一样的。
能把你的窗体截图上传吗?
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个你可以用silverlight 很多空间都有随意拖动的功能。不过一般这种技术被flash所替代
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询