C# c“生成一个可变值”&引用;单击按钮,但仅指向对话框

C# c“生成一个可变值”&引用;单击按钮,但仅指向对话框,c#,.net,permissions,C#,.net,Permissions,我有一个无模式用户界面,它将用户ID添加到允许或删除对程序部分访问的列表中。当我点击“修改”按钮时,一切正常。假设我关闭对话框并实现“等等,忘记做X”。当我重新打开对话框,执行我的工作并单击“修改”时,即使文本框为空,用于添加用户ID的值仍可用于程序 它发生在下面代码的某个地方 public static void checkSame() { int count = 0; bool test = false; while (linesPerm.Length >=

我有一个无模式用户界面,它将用户ID添加到允许或删除对程序部分访问的列表中。当我点击“修改”按钮时,一切正常。假设我关闭对话框并实现“等等,忘记做X”。当我重新打开对话框,执行我的工作并单击“修改”时,即使文本框为空,用于添加用户ID的值仍可用于程序

它发生在下面代码的某个地方

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
用于后续的其他代码中

编辑:好的。我刚刚测试了这个,值保存在内存中。我有一个对话框Form1,它有一个按钮,可以在那里打开dialog Star。在Star上有一个打开权限的按钮。StartHere拥有权限,因此当我关闭StartHere时,权限和StartHere的所有其他子表单都将关闭。这些都是非模态对话框。我的变量tbPermValue被保存在内存中,返回到Form1。当我关闭对话框时,该值未被释放。我将按照下面Eric的建议回去研究垃圾收集。谢谢你,埃里克。一旦我找到了这个过程的规则,我会删除这个问题,或者至少发布一个新的更好的问题。多谢各位

编辑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
,但均无效。

我看到您说您已尝试在switch语句的“是”部分设置以下内容:

tbUserName.Text = "";
tbUserName.Clear();
但是在“否”部分,您没有设置
tbUserName
,而是设置变量
tbPermValue
。据我所知,你也应该

tbPermValue = "";

在“是”部分,您也可以清除该变量,甚至可以在对话框关闭之前将其移出开关并让其这样做,因为您将在所有可能的开关情况下进行设置。

不要使用
tbPermValue
,而是直接使用
文本框

while (linesPerm.Length >= count && tbUserName.Text != "")
编辑

addPerm
中的代码更改为此,您就完成了:):


你不需要
checkSame()

中的
开关(dr)
,我已经读了好几遍了,仍然不知道你在问什么?我没有投反对票,也永远不会投反对票。但老实说,您的代码似乎真的不清楚。有没有想过使用绑定和MVVM。这并不简单,但相信我,它可以解决很多问题,而且在最后,它更容易维护。@EricOuellet我不介意投反对票。我认为如果他们留下评论会很有帮助,就像你那样。两条评论说有些事情不清楚。我的要求和更干净的代码。这至少告诉了我一些事情。如果它得到1000张反对票,我会大发雷霆。但是如果我得到1000条评论,我可以看到其他人看到的:-D,这反过来可能会帮助我在未来提出不同的问题。好的,说清楚。您有一个文本框条目。当有人输入一个值并按下“回车”键时(例如),该值将根据(
something?
)进行检查。如果存在,则会出现一个消息框,询问('这是重复的。是否继续?'),如果他们说是(
doSomething
)。如果他们说不(
doSomethingElse
)。你能澄清一下你想要什么吗?我作为代码放置的位是用来做什么的,如果以后还有其他位要做吗?如果值仍然存在,那是因为它从来没有被GC过,而你正在使用同一个对话框。您也可以清除Oninitialize或OnLoad事件中的值,但如果需要,这是因为您在某个地方遇到了更深层次的问题。谢谢您的帮助<代码>tbUserName可在对话框权限中找到,而
tbPermValue
则从
targetForm
权限中分配值
tbUserName
。我清除表单权限上按钮单击方法内部的
tbUserName
。哦,我想你应该使用一个标志,但是如果按照jbutler483建议的以前的值进行测试,我会使用DialogResult属性。然后,在最内层if中的addPerm方法中,您可以针对c.Text!=“”和DialogResult==true,如果用户单击yes时DialogResult为true,则您知道忽略tbPermValue=C.Text。当然,正如Eric Ouellet现在向你(和我!)表明的那样,这里真正的问题是垃圾收集。我不确定你所说的旗帜是什么意思?我也不明白为什么在MessageBox上选择No会清除内存中保存的值?在你发表评论后,我进一步解释了使用标志,希望它能更好地回答这个问题。至于为什么选择“不工作”…我也不明白,尽管我猜这与tbPermValue=“””一行有关;我没有访问
tbUserName
的权限。它从UI传递到我的逻辑文件。谢谢你的评论。水力压裂技术太棒了!!:-我要去真正的工作了。我一定会通过这一步,看看你是如何修复它的。我的英雄!!:-D非常感谢你!!好啊我看到了。当我添加
tbUserName.Clear()时权限我通过清除字段做了正确的事情
public static void addPerm(System.Windows.Forms.Form targetForm)
{
    foreach (Control C in targetForm.Controls)
    {
        if (C.GetType() == typeof(TextBox))
        {
            tbPermValue = C.Text;
        }
    }
}