c#生成一个变量值“";单击按钮,但仅限于对话框
本文关键字:按钮 单击 对话框 quot 变量值 一个 | 更新日期: 2023-09-27 18:28:23
我有一个无模式UI,它将用户ID添加到允许或删除对程序部分访问的列表中。当我点击修改按钮时,一切都会正常工作。假设我关闭对话框并意识到"等等,忘记做X了"。当我重新打开对话框,执行我的工作并单击Modify时,即使文本框为空,用于添加userID的值仍然可用于程序。
它发生在以下代码中的某个地方。
public static void checkSame()
{
int count = 0;
bool test = false;
while (linesPerm.Length >= count && tbPermValue != "")
{
if (linesPerm.Length >= count)
{
test = linesPerm.Contains(tbPermValue);
count += (linesPerm.Length + 1);
if (test == true)
{
DialogResult dr = MessageBox.Show("The UserID " + tbPermValue +
" already exists in the Permissions column. "
+ Environment.NewLine + "Would you like to add the UserID" +
tbPermValue + " to the Permissions column anyway?",
"User Already Exists", MessageBoxButtons.YesNo,
MessageBoxIcon.Question);
switch (dr)
{
case DialogResult.Yes:
break;
case DialogResult.No:
tbPermValue = "";
break;
}
}
}
else
{
MessageBox.Show("Do Nothing");
}
}
}
如果用户在对话框中选择"否",则tbPermValue
的值对程序不可用。如果用户选择"是",则即使对话框关闭并重新打开,tbPermValue
的值也会保持不变。我已经尝试过这样清除文本框值。
tbUserName.Text = "";
tbUserName.Clear();
以及其他几种方式。tbUserName
值将从文本框中清除,但不会从上面的代码中清除。我得到tbPermValue
的值是这样的。
public static void addPerm(System.Windows.Forms.Form targetForm)
{
foreach (Control C in targetForm.Controls)
{
if (C.GetType() == typeof(TextBox))
{
if (C.Text != "")
{
tbPermValue = C.Text;
}
}
}
}
这是一个由其父级拥有的无模式对话框。
有人能告诉我一个方向吗?点击按钮后,可以删除对第一个代码框的DialogResult部分的tbPermValue
访问权限。我不能完全丢失它,因为tbPermValue
在以后的其他代码中使用。
编辑:好的。我刚刚测试了这个,值被保存在内存中。我有一个对话框Form1,它有一个打开对话框StartHere的按钮。在"开始"中,有一个按钮可以打开"权限"。StartHere拥有权限,因此当我关闭StartHere时,权限和StartHere的所有其他子窗体都将关闭。这些都是无模式对话框。我的变量tbPermValue在内存中一直保存到Form1。当我关闭对话框StartHere时,该值没有被释放。我要回去研究一下下面孙的建议。谢谢你,孙。一旦我找到这个过程的规则,我会删除这个问题,或者至少发布一个新的更好的问题。非常感谢。
编辑2:这是你要求的γηράσκωδ'αείπιλάδιδασκίμε的代码
private void bModify_Click(object sender, EventArgs e)
{
WidgetLogic.addPerm(this);
WidgetLogic.checkSame();
WidgetLogic.writePerm(this);
WidgetLogic.writeAdmin(this);
WidgetLogic.writeDetailer(this);
tbUserName.Clear();
}
如上所述,我已经尝试了许多方法来清除tbUserName
,但都没有成功。
不要使用tbPermValue
,而是直接使用textbox
:
while (linesPerm.Length >= count && tbUserName.Text != "")
编辑
将addPerm
中的代码更改为这样,您就完成了:):
public static void addPerm(System.Windows.Forms.Form targetForm)
{
foreach (Control C in targetForm.Controls)
{
if (C.GetType() == typeof(TextBox))
{
tbPermValue = C.Text;
}
}
}
checkSame()
中不需要switch (dr)
我看到您说您已经尝试在switch语句的"yes"部分设置以下内容:
tbUserName.Text = "";
tbUserName.Clear();
但在"否"部分,您不设置tbUserName
,而是设置变量tbPermValue
。据我所知,你也应该设置
tbPermValue = "";
在"是"部分,也可以清除该变量,甚至只是将其从开关中移出,并在对话框关闭之前让它这样做,因为无论如何,在所有可能的开关情况下都会设置它。