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,但都没有成功。

c#生成一个变量值“";单击按钮,但仅限于对话框

不要使用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 = "";

在"是"部分,也可以清除该变量,甚至只是将其从开关中移出,并在对话框关闭之前让它这样做,因为无论如何,在所有可能的开关情况下都会设置它。