gpt4 book ai didi

c# - 用按钮计算表格位置

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

我正在进行编程任务,并且试图使此按钮从两个文本框中获取值,并计算表单窗口的新位置。我在将文本框值转换为int类型时遇到麻烦,并且无法通过btnCompute_click方法使用。

    private void btnCompute_Click(object sender, EventArgs e)
{
int x = Convert.ToInt32(txtXvalue);
int y = Convert.ToInt32(txtYvalue);
Location = new Point(x,y);
}

private void xValue_TextChanged(object sender, EventArgs e)
{
int xValue =
Convert.ToInt32(txtXvalue);
}

private void yValue_TextChanged(object sender, EventArgs e)
{
int y =
Convert.ToInt32(txtYvalue);
}


我忘了添加一些其他信息,x和y的可接受值必须为正。我会使用if ... else语句来控制可接受的值吗?

最佳答案

user29 ...我不知道为什么死亡...回答。对我来说完全是无稽之谈。但你的问题对我来说很有意义。我想死亡...不明白你的问题。

首先,您要求的所有内容都不需要TextChanged方法中的任何内容。
根据您的问题,使用btnCompute_Click()方法进行所有处理是因为您想在单击按钮时执行某项操作,而不是在用户编辑文本框的文本时执行某项操作。

每当这些文本框的Text值更改时,将执行TextChanged()方法中的代码。那不是你要求的。但是,例如,如果您希望标签变得可见或隐藏并设置显示文本的标签文本,则可以使用这些事件,因此可以将其用作错误消息标签,例如,如果a的整数值文本框为负数,即使无法解析也是如此。

因此,在您的btnCompute_Click()方法中,您首先要获取int值。如果文本不是整数,则需要准确确定要执行的代码。在我看来,大多数初学者都对诸如消息框之类的东西进行编码。我喜欢根据自己的感觉为用户提供带有标签或状态栏消息的反馈。由于当文本框无法解析为整数时,我的首选是使用Label来显示“错误”消息,因此当值不是我想要的值时,我将简单地从button click方法返回而无需执行任何操作。这样,用户可以在不烦恼弹出消息框或其他任何内容的情况下获取其消息。但是,是否要弹出消息框取决于您。其他人给了您很好的代码来做到这一点。我想给您提供好的代码,避免出现我认​​为烦人的弹出框。

将字符串转换为int时,如果无法解析字符串,则Convert.ToInt32将引发错误。 int.TryParse是将字符串真正解析为整数而没有任何错误的灵丹妙药。这是我要使用的整个代码。我做了一个新项目,只是为了确保我没有给您错误的代码。我向您提供有关如何处理此问题的代码。

在更新的先决条件中,您提到x&y必须为正且不能为负。我向您指出,这些并不相同。例如,0既不是正数也不是负数。我假设您从技术上讲意味着x和y不能为负(并且也不必为正,因为应该允许0)。

    private void Form1_Load(object sender, EventArgs e)
{
lblErrorX.Text = null;
lblErrorY.Text = null;
}

private void btnMoveForm_Click(object sender, EventArgs e)
{
int x = 0; if (int.TryParse(txtX.Text, out x) == false) { return; }
int y = 0; if (int.TryParse(txtY.Text, out y) == false) { return; }
if (x < 0 || y < 0) { return; }
this.Location = new Point(x, y);
}

private void txtX_TextChanged(object sender, EventArgs e)
{
int x = 0;
if (int.TryParse(txtX.Text, out x) == false)
{ lblErrorX.Text = "X is not an valid integer."; return; }
if (x < 0) { lblErrorX.Text = "X cannot be negative."; return; }
lblErrorX.Text = null;
}

private void txtY_TextChanged(object sender, EventArgs e)
{
int y = 0;
if (int.TryParse(txtY.Text, out y) == false)
{ lblErrorY.Text = "Y is not an valid integer."; return; }
if (y < 0) { lblErrorY.Text = "Y cannot be negative."; return; }
lblErrorY.Text = null;
}


在我的项目中,在窗体上,按从左到右的顺序:lblX,txtX,lblErrorX。我对Y有相同的对应项:lblY,txtY,lblErrorY。然后我有一个 Button:btnMoveForm。因此,我的txtX对应于您的txtXvalue。我的btnMoveForm对应于您的btnCompute,但对我来说,“计算”是指要计算,实际上并不是该按钮的作用。这个按钮正在移动表格,所以这就是为什么我这样命名。

我玩过同时设置 LocationDesktopLocation的情况,它似乎做同样的事情。我一直使用 Location,而我刚刚了解到DesktopLocation也可以使用,但是由于 Location较短,所以我使用它。

有人问为什么我不使用 if(!int.TryParse(...)) { return; }而不是我的 if(int.TryParse(...) == false) { return; }。不幸的是,我的理由是我认为 !是阅读代码时容易遗漏的一个字符,因此我避免使用它,尤其是当该小错误表示与代码实际工作相反的时候。因此,我对'== false'的使用始终是为了人类清楚。但是我喜欢只需要一个字符的C#简易性。我只是觉得可耻的是,编写对人类更好的代码更加安全,因此我们不要误解。这是我使用'== false'代替 !的唯一原因。如果愿意,请使用 !。很方便我很遗憾没有使用它。呵呵。

哦,我在设计视图中的表单上设置 lblErrorX.Text = null;lblErrorY.Text = null;的原因是,我给他们一个文本值,这样我就可以看到它们。 :)因此,当程序运行时,我将文本设置为空白。但是,您可以根据需要使用Visible属性。我只是让它们始终可见并且仅设置其 Text属性。

关于c# - 用按钮计算表格位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19672824/

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