【问题标题】:How can I only code this once and replicate c#我怎样才能只编码一次并复制 c#
【发布时间】: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 将包含鼠标参数

标签: c# class


【解决方案1】:

您可以使用文本框作为参数

    private void RightMouseClick(TextBox txtBox)
    {
        int rowindex = dgvResults.CurrentCell.RowIndex;
        int columnindex = dgvResults.CurrentCell.ColumnIndex;

        if (string.IsNullOrEmpty(txtResult))
        {
            txtBox.Text = dgvResults.Rows[rowindex].Cells[columnindex].Value.ToString();
        }
        else
        {
            string selectedCell;
            double resultText;
            selectedCell = dgvResults.Rows[rowindex].Cells[columnindex].Value.ToString();
            resultaat = Convert.ToDouble(txtBox.Text) + Convert.ToDouble(selectedCell);
            txtBox.Text = Convert.ToString(resultText);
        }
    }

您应该确保您还检查以确保文本框不为 NULL

【讨论】:

  • 感谢您的回复。我修改了一些部分以便它可以工作,现在我可以在每个右键单击操作时调用它。
猜你喜欢
  • 2011-01-16
  • 1970-01-01
  • 2017-08-30
  • 2021-07-30
  • 2020-11-28
  • 1970-01-01
  • 2015-11-21
  • 1970-01-01
  • 2018-07-01
相关资源
最近更新 更多