C#-将数据添加到列表<;类别>;内部列表<;类别>;
我的程序使用全局钩子来捕获和记录鼠标点击。按下开始按钮,开始记录这些点击以及记录日期和时间。当按下停止按钮时,也会记录停止时间和日期 下面显示了我的C#-将数据添加到列表<;类别>;内部列表<;类别>;,c#,list,listbox,touch,mouseevent,C#,List,Listbox,Touch,Mouseevent,我的程序使用全局钩子来捕获和记录鼠标点击。按下开始按钮,开始记录这些点击以及记录日期和时间。当按下停止按钮时,也会记录停止时间和日期 下面显示了我的列表,我在其中捕获了所需的数据。我遇到的问题是获得列表接触点来填充鼠标点击和时间。(鼠标点击和接触点可能会让人困惑,但我希望最终能在触摸屏上实现这一点) 简而言之,我有一个记录列表,每个记录都有自己的嵌套单击列表。我的最终目标是在列表框中显示这些内容,然而,我对这一点还不熟悉,目前在实现这一点上遇到了一些困难。非常感谢建设性的批评。我想说,您只需要两
列表
,我在其中捕获了所需的数据。我遇到的问题是获得列表接触点
来填充鼠标点击和时间。(鼠标点击和接触点可能会让人困惑,但我希望最终能在触摸屏上实现这一点)
简而言之,我有一个记录列表,每个记录都有自己的嵌套单击列表。我的最终目标是在
列表框
中显示这些内容,然而,我对这一点还不熟悉,目前在实现这一点上遇到了一些困难。非常感谢建设性的批评。我想说,您只需要两个列表框。一个是外部列表,第二个是外部列表中所选项目的列表。顺便说一句,不要将“+”与字符串一起使用。使用string.Format方法。这样做效率很低。谢谢你的回复,你知道为什么字符串中的recData.touchPoints会返回null吗?填充嵌套的TouchData列表时似乎出现问题。它在哪里为空?我看不到您在任何地方分配属性接触点。为什么不使用日期时间类型作为日期数据?为什么在属性中使用字段名“\u something”?属性通常是Pascal样式的名称。这意味着int属性{get;set;}嗨,接触点位于RecordingData类的最顶端。DateTime已用于日期类型。以u开头的属性存在,因此我不会与表单中指定的变量以及RecordingData和TouchData中指定的变量混淆,谢谢。
public class RecordingData
{
public string _recStartDate { get; set; }
public string _startRecTime { get; set; }
public string _recStopDate { get; set; }
public string _stopRecTime { get; set; }
public List<TouchData> touchPoints { get; set; }
public override string ToString()
{
return "Recording: " +
_recStartDate + " "
+ _startRecTime + " - "
+ _recStopDate + " "
+ _stopRecTime;
}
}
public class TouchData
{
public int _touchX { get; set; }
public int _touchY { get; set; }
public string _xyTouchTime { get; set; }
public override string ToString()
{
return "x: " + _touchX + " y: " +
_touchY + " Time: " + _xyTouchTime;
}
}
List<RecordingData> recordingData = new List<RecordingData>();
List<TouchData> touchData = new List<TouchData>();
private void OnMouseDown(object sender, MouseEventArgs e)
{
xyTouchTime = DateTime.Now.ToString("HH:mm:ss tt");
Log(string.Format("X: {0} \t Y: {1} \t Date: {2} \t Time: {3} \n {4}",
e.X.ToString(),
e.Y.ToString(),
DateTime.Now.ToString("dd/MM/yyyy"),
xyTouchTime,
Environment.NewLine));
touchX = e.X;
touchY = e.Y;
// add these values to our touch List<>
touchData.Add(new TouchData
{
_touchX = touchX,
_touchY = touchY,
_xyTouchTime = xyTouchTime
});
}
private void Stop_Click(object sender, EventArgs e)
{
recStopDate = DateTime.Now.ToString("dd/MM/yy");
recStopTime = DateTime.Now.ToString("HH:mm:ss tt");
Unsubscribe();
Show();
this.WindowState = FormWindowState.Normal;
this.ShowInTaskbar = true;
notifyIcon.Visible = false;
// populate List<T> with our data
recordingData.Add(new RecordingData
{
_recStartDate = recStartDate,
_startRecTime = recStartTime,
_recStopDate = recStopDate,
_stopRecTime = recStopTime
});
// update our listbox
BindData();
}
void BindData()
{
listBox1.DataSource = null;
listBox1.DataSource = recordingData;
listBox1.SelectedIndex = 0;
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
int index = listBox1.SelectedIndex;
if (listBox1.SelectedItem == null)
{
return;
}
else
{
RecordingData recData = (RecordingData)listBox1.SelectedItem;
textBoxDebug.Text = "Start Date: " + recData._recStartDate + Environment.NewLine
+ "Stop Date: " + recData._recStopDate + Environment.NewLine
+ "Start Time " + recData._startRecTime + Environment.NewLine
+ "Stop Time " + recData._stopRecTime + Environment.NewLine
+ String.Join(Environment.NewLine, recData.touchPoints + Environment.NewLine);
}
}