获取运行时创建的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。
谢谢
您可以使用如下匿名方法:
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);
}
}