2017-06-15 86 views
-1

我有下面的代码,但我不明白为什么当我检查复选框时,访问字符串不会更改为“Y”。C#复选框返回无效值

string access1 = "N";` 

void checkvalue(CheckBox chkbox, string access) 
{ 
    if (chkbox.Checked) 
    { 
     access = "Y"; 
    } 
    else 
    { 
     access = "N"; 
    } 
} 

private void checkBox1_CheckedChanged(object sender, EventArgs e) 
{ 
    checkvalue(checkBox1, access1); 
} 
+0

删除您传递的参数或声明它为'ref string access'('checkvalue(checkBox1,ref access1)')。 – dcg

+0

只需直接更新'access1',而不是将其作为参数传入。 – juharr

+0

如果你想要知道是否使用Y或N,你不需要一个变量,只要求'chkbox.Checked'。 – dcg

回答

1

checkvalue方法的access参数没有被引用传递(使用ref关键字)。所以,要设置access本地为“N”和它只要你checkvalue方法立即返回遗忘。 access1变量不受影响。您的方法需要通过参考ref关键字接受access

+0

不可改变的评论是没有用的,因为它在这种情况下无关紧要,他正在重新分配一个字符串(或试图)不改变字符串的值 – pm100

+0

@ pm100 OP的印象是他正在给字符串赋值他会为int分配一个值。但无论如何,技术上你是对的,所以我解决了这个问题。 –