2011-05-14 61 views
1

我有一个以下程序,它从4个文本框中获取字符串,并将它们放入数组中,并在用户单击btnOK后显示消息(从数组创建)。我有一个叫做btnClear的按钮,如果点击它应该清除消息字符串和数组,但它没有这样做,我不太确定为什么,有人可以看一看并提供建议。无法清除数组和字符串

string[,] namesTable = new string[10, 4]; 
int row = 0; 
string message = ""; 

private void btnOK_Click_1(object sender, EventArgs e) 
{ 

    namesTable[row, 0] = txtFirstName.Text; 
    namesTable[row, 1] = txtSurname.Text; 
    namesTable[row, 2] = txtPosition.Text; 
    namesTable[row, 3] = txtComment.Text; 
    row++; 

    message = "Name.\tSurname\tPosition\tComment\n"; 
    for (int i = 0; i < namesTable.GetLength(0); i++) 
    { 
    if (namesTable[i, 0] != null) 
    { 
     for (int j = 0; j < namesTable.GetLength(1); j++) 
     { 
     message += namesTable[i, j] + "\t"; 
     } 
     message += "\n"; 
    } 
    } 

    MessageBox.Show(message, "Names Table"); 
} 

private void btnClear_Click_1(object sender, EventArgs e) 
{ 
    Array.Clear(namesTable, 0, 4); 
    message = ""; 
} 

如果您需要更多信息,请让我知道。

回答

1

清除元件的范围从行包装在一个多维阵列来排因此 应使用:

Array.Clear(namesTable, 0, 40); 
//     ^^ 
//      | |_The number of elements to clear. 
//      | 
//      |____The starting index of the range of elements to clear. 
+0

@fadjad你能解释一下,为什么当我把它设置为4并做如下操作:1)输入4个值,点击确定,2)再次点击确定3)点击清除4)再次点击确定消息框仍显示第二行和第三? – 2011-05-14 13:55:31

+0

因为在你的代码中:'Array.Clear(namesTable,0,4);'只通过'namesTable [0,4]'0设置'namesTable [0,1]'。 – fardjad 2011-05-14 13:59:39

+0

谢谢,这是有道理的。 – 2011-05-14 14:06:33

0

您正在清除索引0中的数组中的4个值。但是,您的插入代码会插入row索引处。这可能是你的问题。 row的价值是多少?

要清除everyting阵列中,简单地做到:

namesTable = new string[10, 4]; 
row = 0; 
+0

row is automaticaly calculated - inc在创建新的“行”数据时进行了重新评估 – 2011-05-14 14:00:11

+0

是否要重新初始化所有行,还是仅重新初始化?在任何情况下,您都需要清除阵列的正确部分。如果你需要清除一切只是'new'一个新的数组,并将'row'设置为0. – driis 2011-05-14 14:04:34

+0

通过“new new array”你是指清除现有的还是其他的东西? – 2011-05-14 14:12:44

0

如果要清除所有数据,请重新初始化所有数据:

private void btnClear_Click_1(object sender, EventArgs e) 
{ 
    this.namesTable = new string[10, 4]; 
    this.row = 0; 
    this.message = ""; 
}