c# - 如何在实时模式下单击鼠标更改文本框位置?
问题描述
我TextBox
在实时模式下创建了一个,并想补充一点,它的位置可以用鼠标更改。我遇到的问题是,在生成 之后TextBox
,我无法在其上执行代码。
这是我的代码:
int Naslov_rnd;
private void Naslov_p_Click(object sender, EventArgs e)
{
Naslov_rnd++;
TextBox tb = new TextBox();
tb.Location = new Point(0, 0);
tb.Width = 200;
tb.Height = 20;
tb.BorderStyle = BorderStyle.None;
tb.BackColor = Color.DodgerBlue;
tb.ForeColor = Color.White;
tb.Name = "Naslov_" + Naslov_rnd.ToString();
tb.Text = "Dodajte Vaš naslov";
tb.Font = new Font("Microsoft Sans Serif", 12);
VizitKartica.Controls.Add(tb);
elementi_lista.AddItem(tb.Name);
tb.MouseMove += new MouseEventHandler(tb_MouseMove);
tb.MouseDown += new MouseEventHandler(tb_MouseDown);
}
protected void tb_MouseDown(object sender, EventArgs e)
{
}
protected void tb_MouseMove(object sender, EventArgs e)
{
}
解决方案
我建议查看TextBox
. 在示例部分中,它们SuspendLayout
在更改TextBox
的属性之前调用ResumeLayout
,并PerformLayout
在将表单添加到Controls
集合之后调用。请注意PerformLayout()
,您可以直接调用,而不是调用ResumeLayout(true)
。
和方法串联使用以在您调整控件的多个属性时抑制多个事件
SuspendLayout
。例如,您通常会调用该方法,然后设置控件的、、或属性,然后调用该方法以使更改生效。ResumeLayout
Layout
SuspendLayout
Size
Location
Anchor
Dock
ResumeLayout
另请注意:
您必须将
Multiline
属性设置为true
以调整控件的高度TextBox
。Size
您可以通过设置属性来调整高度。
我会将您的Naslov_p_Click
处理程序更改为:
int Naslov_rnd;
private void Naslov_p_Click(object sender, EventArgs e)
{
TextBox tb = new TextBox();
VizitKartica.SuspendLayout(); // Call before changing TextBox properties
tb.Location = new Point(0, 0);
tb.Multiline = true; // Set before changing width/height
tb.Size = new Size(200, 20); // Use Size property
tb.BorderStyle = BorderStyle.None;
tb.BackColor = Color.DodgerBlue;
tb.ForeColor = Color.White;
tb.Name = "Naslov_" + Naslov_rnd.ToString();;
tb.Text = "Dodajte Vaš naslov";
tb.Font = new Font("Microsoft Sans Serif", 12);
VizitKartica.Controls.Add(tb);
elementi_lista.AddItem(tb.Name);
VizitKartica.ResumeLayout(true); // Call after adding it to the Controls collection
tb.MouseMove += new MouseEventHandler(tb_MouseMove);
tb.MouseDown += new MouseEventHandler(tb_MouseDown);
}
编辑
如果在方法中声明变量,则不能在方法之外使用它,因为它具有局部范围。tb
在方法之外声明变量Naslov_p_Click
将允许您从其他方法访问它:
int Naslov_rnd;
TextBox tb; // Declare it here
private void Naslov_p_Click(object sender, EventArgs e)
{
tb = new TextBox();
// ...
}
protected void tb_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
tb.Left = e.X + tb.Left;
tb.Top = e.Y + tb.Top;
}
}
protected void tb_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Point MouseDownLocation = e.Location;
}
}
推荐阅读
- c++ - Lower_bound 给出其他结果
- python - Pandas `transform(set)` 引发异常
- python - 在 Python 中的表中格式化未知输出
- python-3.x - 在没有密码和连接类型的情况下创建气流连接
- python - 在 numpy 中使用网格网格进行条件操作并合并它们?
- python-3.x - Plot_confusioin_matrix 图没有显示整数值,而是显示了一些指数值
- performance - 在完成事务控制器内的所有请求时关闭线程组
- sql - 需要在 WHERE/HAVING 中使用 COUNT 来返回打开和关闭
- python - python中大型数据集的反向消除
- curl - 使用 curl 将新事件插入 CalDAV 日历