获取运行时创建的Label-Objects,以便在单击时返回值

时间:2014-03-20 09:25:54

标签: c# events object click

我正在创建一个心理学实验,其中屏幕上会显示一组标签。 为了创建标签,我编写了一个名为 Stimulus 的类,它包含我需要使用/捕获的参数,以及用于在屏幕上显示标签的参数。因此 - 屏幕/表单由刺激对象填充,在屏幕上显示为标签。

这是刺激类:

class Stimulus
{
    public int myNumber { get; set; }
    public string Text { get; set; }
    public Image myImage { get; set; }
    public int Pos_X { get; set; }
    public int Pos_Y { get; set; }
    public DateTime responseTime { get; set; }
    public DateTime endResponseTime { get; set; }
    public int currentTracker { get; set; }
    public bool clickTypeTrueFalse { get; set; }
    public Label stimulsLabel { get; set; }


    public Label addMyLabel()
    {
        Label myLabel = new Label();
        myLabel.Font = new Font("Ariel", 10);
        myLabel.ForeColor = System.Drawing.Color.White;
        myLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
        myLabel.Text = Text;
        myLabel.Image = myImage; //will start with global::my_pTrials_01.Properties.Resources.myBlueCircle
        myLabel.Size = new Size(myLabel.Image.Width, myLabel.Image.Height);
        myLabel.Location = new Point(Pos_X, Pos_Y);

        return (myLabel);
    }

以下是使用object-created-labels填充Form的方法:

private void CreateLabels(int[]Positions1, int[]Positions2, string[] stimulusLabels)
    {
        for (int i = 0; i < Positions1.Length; i++)
        {
            Stimulus thisStimulus = new Stimulus();
            thisStimulus.currentTracker = myTracker.mytracking;
            thisStimulus.myImage =    global::my_pTrials_01.Properties.Resources.myBlueCircle;
            thisStimulus.myNumber = i;
            thisStimulus.Pos_X = Positions1[i];
            thisStimulus.Pos_Y = Positions2[i];
            thisStimulus.Text = stimulusLabels[i];
            thisStimulus.stimulsLabel =  thisStimulus.addMyLabel();
            thisStimulus.stimulsLabel.Click += new EventHandler(myLabel_Click2);

            Controls.Add(thisStimulus.stimulsLabel);

        }
    }

问题是我需要每个标签在点击时返回一个数字(即myNumber整数)。 但是当我添加了这个点击事件时:

thisStimulus.stimulsLabel.Click += new EventHandler(myLabel_Click2);

我得到的是发件人为空(在myLabel_Click2的方法中):(

有关如何让程序识别哪个对象创建了此标签的任何建议?更具体地说 - 我想检索创建我刚刚点击的标签的对象的变量myNumber。

由于

2 个答案:

答案 0 :(得分:0)

您可以使用匿名方法,例如:

thisStimulus.StimulusLabel.Click += (sender) => 
{
     int number = thisStimulus.myNumber;
     // your code here ...
}

答案 1 :(得分:0)

您可以使用以下标签继承“标签”:

public class MyLabel : Label
{
    public int myNumber { get; set; }
    public string Text { get; set; }
    public Image myImage { get; set; }
    public int Pos_X { get; set; }
    public int Pos_Y { get; set; }
    public DateTime responseTime { get; set; }
    public DateTime endResponseTime { get; set; }
    public int currentTracker { get; set; }
    public bool clickTypeTrueFalse { get; set; }
}

你的CreateLabels功能:

private void CreateLabels(int[]Positions1, int[]Positions2, string[] stimulusLabels)
{
    for (int i = 0; i < Positions1.Length; i++)
    {
        MyLabel label = new Stimulus();
        //All other field inits
        label.Click += myLabel_Click2;

        Controls.Add(label);
    }
}