【发布时间】:2019-10-21 01:13:29
【问题描述】:
我是 C# 和课程的新手。我正在测试制作一个datagridview,用户可以在其中右键单击并弹出一个contextmenustrip。现在我的问题如下。
我编写了将文本添加到文本框的代码,如果文本框不为空,则增加文本框。With help from this post.
private void TsmItem_Click(object sender, EventArgs e)
{
int rowindex = dgvResults.CurrentCell.RowIndex;
int columnindex = dgvResults.CurrentCell.ColumnIndex;
double resultText;
if (string.IsNullOrEmpty(Textbox.Text))
{
Textbox.Text = dgvResults.Rows[rowindex].Cells[columnindex].Value.ToString();
}
else
{
string selectedCell;
selectedCell = dgvResults.Rows[rowindex].Cells[columnindex].Value.ToString();
ResultText = Convert.ToDouble(Textbox.Text) + Convert.ToDouble(selectedCell);
Textbox.Text = Convert.ToString(ResultText);
}
}
有没有办法只使用此代码 1 次并在每次需要时调用它。这样我只需要更改 textboxes.Text?否则我需要复制粘贴这段代码10次以上。
我尝试了什么
private void TsmItem_Click(object sender, EventArgs e)
{
Textbox.Text = RightMouseClick(Textbox.Text);
}
private void RightMouseClick(string txtResult)
{
int rowindex = dgvResults.CurrentCell.RowIndex;
int columnindex = dgvResults.CurrentCell.ColumnIndex;
if (string.IsNullOrEmpty(txtResult))
{
txtResult = dgvResults.Rows[rowindex].Cells[columnindex].Value.ToString();
}
else
{
string selectedCell;
double resultText;
selectedCell = dgvResults.Rows[rowindex].Cells[columnindex].Value.ToString();
resultaat = Convert.ToDouble(txtResult) + Convert.ToDouble(selectedCell);
txtResult = Convert.ToString(resultText);
}
}
修复
private string RightMouseClick(TextBox txtResult)
{
int rowindex = dgvResults.CurrentCell.RowIndex;
int columnindex = dgvResults.CurrentCell.ColumnIndex;
if (string.IsNullOrEmpty(txtResult.Text))
{
return txtResult.Text = dgvResults.Rows[rowindex].Cells[columnindex].Value.ToString();
}
else
{
string selectedCell;
double resultaat;
selectedCell = dgvResults.Rows[rowindex].Cells[columnindex].Value.ToString();
resultaat = Convert.ToDouble(txtResult.Text) + Convert.ToDouble(selectedCell);
return txtResult.Text = Convert.ToString(resultaat);
}
}
【问题讨论】:
-
如果您想创建可重用的方法,那么您只需使用通用代码并通过参数添加特定部分。您的方法中有哪些特定部分?你在传递
Text,那么传递一个完整的TextBox控件怎么样? -
您可以将所有文本框的点击映射到同一个事件处理程序。在您的设计器中,您应该添加 this.textBox1.Click += new System.EventHandler(this.RightClick); this.textBox2.Click += new System.EventHandler(this.RightClick);等等。然后在您的事件处理程序中,发送者将是文本框,而 EventArgs 将包含鼠标参数