【问题标题】:Access data in EventArgs Class访问 EventArgs 类中的数据
【发布时间】:2014-02-05 18:09:58
【问题描述】:

我正在尝试通过以下代码访问 ResultID 中的数据存储:

public class ResultPanelEventArgs : EventArgs
{
    private string stringResultId = string.Empty;
    private int intRowIndex = -1;
    private string stringAnalysisName = string.Empty;
    private DateTime dateTimeAnalysisDateTime;

    /// <summary>
    /// Gets or sets the row index of selected result.
    /// </summary>
    public int RowIndex
    {
        get { return intRowIndex; }
        set { intRowIndex = value; }
    }

    /// <summary>
    /// Gets or sets the result id of selected result.
    /// </summary>
    public string ResultId
    {
        get { return stringResultId; }
        set { stringResultId = value; }
    }

    /// <summary>
    /// Gets or sets the date and time of the selected result.
    /// </summary>
    public DateTime AnalysisDateTime
    {
        get { return dateTimeAnalysisDateTime; }
        set { dateTimeAnalysisDateTime = value; }
    }

    /// <summary>
    /// Gets or sets the name of the sample as Analysis name.
    /// </summary>
    public string AnalysisName
    {
        get { return stringAnalysisName; }
        set { stringAnalysisName = value; }
    }
};

我有办法提取信息:

private string GetResultID(object sender, ResultPanelEventArgs e)
    {        


        string resultID = string.Empty;
        resultID = e.ResultId.ToString();
        return resultID;           

    }

但似乎无法调用该方法(我得到参数错误)。我对 c# 有点陌生,并且从未使用过 EventArgs,所以我什至不知道这是否可能。有关如何访问此处存储的数据的任何建议?

这里根据请求提供了三种填充 ResultId 的方法:

private ResultPanelEventArgs GetDataForTheGivenRowIndex(int intRowIndex)
    {
        ResultPanelEventArgs resultPanelEventArgs = new ResultPanelEventArgs();
        resultPanelEventArgs.RowIndex = intRowIndex;
        try
        {
            if (intRowIndex >= 0 && intRowIndex < dataGridViewResultView.Rows.Count)
            {
                object objectResultId = null;
                if (dataGridViewResultView.Columns.Contains("ColumnResultId") == true)
                {
                    objectResultId = dataGridViewResultView.Rows[intRowIndex].Cells["ColumnResultId"].Value;
                }
                else
                {
                    objectResultId = dataGridViewResultView.Rows[intRowIndex].Tag;
                }
                if (objectResultId != null)
                {
                    resultPanelEventArgs.ResultId = objectResultId.ToString();
                }

                object objectAnalysisName = null;
                if (dataGridViewResultView.Columns.Contains("ColumnAnalysis") == true)
                {
                    objectAnalysisName = dataGridViewResultView.Rows[intRowIndex].Cells["ColumnAnalysis"].Value;
                }
                else
                {
                    objectAnalysisName = dataGridViewResultView.Rows[intRowIndex].Tag;
                }
                if (objectAnalysisName != null)
                {
                    resultPanelEventArgs.AnalysisName = objectAnalysisName.ToString();
                }

                object objectAnalysisDateTime = null;
                if (dataGridViewResultView.Columns.Contains("ColumnDate") == true)
                {
                    objectAnalysisDateTime = dataGridViewResultView.Rows[intRowIndex].Cells["ColumnDate"].Value;
                }
                else
                {
                    objectAnalysisDateTime = dataGridViewResultView.Rows[intRowIndex].Tag;
                }
                if (objectAnalysisDateTime != null)
                {
                    resultPanelEventArgs.AnalysisDateTime = 
                             Utilities.ConvertStringToDateTime(objectAnalysisDateTime.ToString());
                }
            }
        }
        catch
        {
            resultPanelEventArgs = null;
            //Nothing to do
        }
        return resultPanelEventArgs;
    }

private ResultPanelEventArgs GetDataForTheGivenResultID(string stringResultId)
    {
        ResultPanelEventArgs resultPanelEventArgs = null;
        try
        {
            foreach (DataGridViewRow dataGridViewRow in dataGridViewResultView.Rows)
            {
                if (dataGridViewRow != null)
                {
                    if (dataGridViewRow.Index >= 0)
                    {
                        if (dataGridViewRow.Cells["ColumnResultId"] != null)
                        {
                            if (dataGridViewRow.Cells["ColumnResultId"].Value.ToString() == stringResultId)
                            {
                                //Create the ResultPanelEventArgs
                                object objectResultId = dataGridViewRow.Cells["ColumnResultId"].Value;
                                object objectAnalysisName = dataGridViewRow.Cells["ColumnAnalysis"].Value;
                                object objectAnalysisDateTime = dataGridViewRow.Cells["ColumnDate"].Tag;
                                resultPanelEventArgs = new ResultPanelEventArgs();

                                if (objectResultId != null)
                                {
                                    resultPanelEventArgs.RowIndex = dataGridViewRow.Index;
                                    resultPanelEventArgs.ResultId = objectResultId.ToString();
                                    resultPanelEventArgs.AnalysisName = objectAnalysisName.ToString();
                                    resultPanelEventArgs.AnalysisDateTime = (DateTime)objectAnalysisDateTime;
                                }

                                dataGridViewRow.Selected = true;
                                break;
                            }
                        }
                    }

                }

            }
        }
        catch
        {
            resultPanelEventArgs = null;
            //Nothing to do
        }
        return resultPanelEventArgs;
    }

 private void dataGridViewResultList_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
    {
        try
        {
            if (e.RowIndex >= 0)
            {
                this.result = this.GetResult(e.RowIndex);

                ResultPanelEventArgs resultPanelEventArgs = new ResultPanelEventArgs();
                resultPanelEventArgs.ResultId = this.result.Id.ToString();
                resultPanelEventArgs.RowIndex = this.dataGridViewResultList.SelectedRows[0].Index;

                if (this.DoubleClicked != null)
                {
                    this.DoubleClicked(sender, resultPanelEventArgs);
                }

                this.DialogResult = DialogResult.OK;
            }
        }
        catch (Exception ex)
        {
            UICommon.LogError(ex);
        }
    }

【问题讨论】:

  • 您能否提供一个示例,说明您在哪里填充事件参数的 ResultID 属性?
  • neontapir,我添加了您要求的方法。

标签: c# arguments eventargs


【解决方案1】:

我假设这是一个事件处理程序。如果您使用的是使用标准基类的事件,但使用 ResultPanelEventArgs 触发它,则需要使用基类 EventArgs 处理它,然后将它们转换为正确的类型。

private void HandleResultID(object sender, EventArgs args)
{        
    var e = (ResultPanelEventArgs) args;
    var resultID = e.ResultId.ToString();


    // Now do something with the ID. You cannot return it, because this is handling the click event.  

}

更新:订阅事件(向事件添加事件处理程序):

this.DoubleClicked += new EventHandler(HandleResultID);

【讨论】:

  • 但是我需要什么参数来调用该方法? this.GetResultId() 不接受 0 个参数。
  • @alex 是的,我忽略了这一点。 willkk 如果你想调用它,我想这不是一个事件处理程序。
  • @willkk 我看到这是一个事件处理程序。返回类型必须为 void。
  • 谢谢大家。我将其设为 void 方法,但如何调用此方法。需要什么论据。
  • 你不叫它。你触发了你正在做的事件。您可能没有先将事件处理程序添加到事件中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-28
  • 2021-05-17
相关资源
最近更新 更多