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

本文关键字:返回 一个 单击 创建 运行时 Label-Objects 获取 | 更新日期: 2023-09-27 17:51:01

我正在创建一个心理学实验,在这个实验中,一组标签显示在屏幕上。为了创建标签,我编写了一个名为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填充表单的方法:

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。

谢谢

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

您可以使用如下匿名方法:

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

你可以从"Label"继承:

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);
    }
}
相关文章: