gpt4 book ai didi

c# - 如何像在绘图程序中一样通过鼠标拖动来调整动态创建的文本框的大小?

转载 作者:太空宇宙 更新时间:2023-11-03 21:21:04 24 4
gpt4 key购买 nike

我在 PictureBox 中创建了一个文本框,在运行时单击鼠标。现在我想使用鼠标拖动来调整它的大小。有一些简单的方法可以做到这一点吗?

这是我目前的代码:

public partial class Form1 : Form
{
public static TextBox PTB; //declaring text box to be created
public static bool textOption; //stores the state of button , i.e whether or not text box button is clicked before or not
public Form1()
{
InitializeComponent();
this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click);
}

private void pictureBox1_Click(object sender, EventArgs e)
{
if (textOption == true)//if user selected option to draw text box
{
MouseEventArgs eM = (MouseEventArgs)e; //create an instance of mouse event
PTB = new TextBox();//dynamically creating text box
PTB.Location = new System.Drawing.Point(eM.X, eM.Y);//settign position of textbox where mouse was clicked
PTB.Name = "textBox1";
PTB.Size = new System.Drawing.Size(100, 20);//size of text box

this.pictureBox1.Controls.Add(PTB);//adding the textbox to the picture box
}
}

最佳答案

更新

对不起,我完全误解了你的问题。

原因可能是您似乎认为画图程序的 Canvas 上有文本框。他们没有。他们绘制文本的方式与绘制直线或圆圈等的方式相同。

此外:调整 TextBox 的大小不会改变字体大小,以防这是您想要的。

最后:TextBox 永远不会是透明的,它总是位于 PictureBox 上并且看起来,好吧,就像一个 TextBox。不像画图程序中的任何东西..

但是:如果您真的想调整 TextBox 的大小,这里有一些提示:

  • 您需要某种方式来向用户显示他们在正确的位置,方法是将光标更改为正确的图标
  • 您需要存储鼠标按下点(注意:它将在 TextBox 内!)并跟踪 MouseMove 中的增量。只要按下按钮,所有报告的 e.Location 仍将位于 TextBox 坐标中。
  • 使用增量(不是绝对值)来增加文本框的大小。
  • 在顶部和左侧调整大小真的很难。 (因为会涉及到同时移动),所以最好不要尝试!
  • 一定要包括搬家,这很容易,而且足以满足您的所有需要​​。

不,这比增加字体大小要难得多。 200-300行代码,我上次做的..

但是您可能会找到另一个更简单的答案;在 Google 上寻找“使用鼠标 winforms c# 调整控件大小” ..

我保留旧的答案,即使它不是您要找的..


关于在放置文本时更改字体大小的旧答案:

这不是很难,但你需要做对;与drawing a Rectangle基本相同 带有实时预览。您需要这些东西:四个事件、一个或两个点、一个大小和一个字体变量..

事件是:

  • 鼠标按下
  • 鼠标移动
  • MouseUp
  • 绘画

您需要存储放置点(在 MouseDown 事件中)和在 MouseMove 中更新的大小。

根据该大小,您可以计算出适合矩形的最大字体大小。

MouseUp 上你完成了事情。

Paint 事件中,您使用当前字体大小在向下点绘制字符串。

MouseMove 中调用 PictureBox 上的 Invalidate 以触发 Paint 事件。

MouseMouve 中,您应该检查 Button 是否在左边。

为了获得更好的 UI,您还可以检查键盘上的 space 并使用它来移动 DownPoint..

Click 事件相当无用,顺便说一句..

这是一个让您入门的最小代码示例:

Point mDown = Point.Empty;
float fSize = 12f;

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
using (Font font = new Font("Consolas", fSize))
e.Graphics.DrawString("Hello World", font, Brushes.Black, mDown);

}

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
mDown = e.Location;
pictureBox1.Invalidate();
}

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
fSize = Math.Abs(e.Y - mDown.Y) / 2f + 1;
pictureBox1.Invalidate();
}

我遗漏了 MouseUp。在这里,您可以将绘制的字符串的最终状态(字体、位置..)存储在某处,或者通过绘制到 Bitmap 等中来保存它。

我也没有进行完整的矩形计算,而是通过简单地将 y 轴移动缩小一点来确定字体大小。您可以用一点毕达哥拉斯来改进 ;-)

关于c# - 如何像在绘图程序中一样通过鼠标拖动来调整动态创建的文本框的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30672365/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com