我正在创建一个心理学实验,其中屏幕上会显示一组标签。 为了创建标签,我编写了一个名为 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。
由于
答案 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);
}
}