下午好,
我是面向对象编程、.NET和C#的新手。我正在学习前面提到的这些主题,目前正在做一项相对简单的编程任务,但最终并没有那么简单,至少。。。对我来说仍然如此。
我想创建一个Windows窗体应用程序,其中包含一个填充了国家/地区标志(.png,128px x 128px)的窗体。在Form_OnLoad()中,读取文件,并存储PictureBox对象数组中的标志,并设置多个对象属性。然后,表格被整齐地填写成一排8面旗帜。到目前为止还不错。
问题:
我想在每个PictureBox上添加一个MouseOver事件处理程序,它会生成一个带有特定标志的国家/地区名称的工具提示。在事件处理程序中,我不知道在我自己已经做了什么之后应该放什么代码。具体来说,我想用MouseOver事件处理程序方法中的标志来处理数组,但从那里看不到它。我被困在这里,虽然我的直觉告诉我离目标不远了,但此刻我的思想决定放弃离终点线几米远的我。有人能帮我一下吗?
这是我已经得到的:
using System;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
namespace WorldFlags
{
public partial class FormWorldFlags :Form {
public FormWorldFlags() {
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {
int col = 0, row = 0;
string imageDirectory = @"D:DocumentsVisual Studio 2017ProjectsITvitaeWorldFlagsflags";
string[] imageFileList = Directory.GetFiles(imageDirectory);
PictureBox[] countryFlag = new PictureBox[imageFileList.Length];
for (int i = 0; i < imageFileList.Length; i++) {
countryFlag[i] = new PictureBox();
countryFlag[i].Name = Path.GetFileNameWithoutExtension(imageFileList[i]);
countryFlag[i].Image = Image.FromFile(imageFileList[i]);
countryFlag[i].Location = new Point(col * 128 + 1, row * 128 + 1);
countryFlag[i].Size = new Size(128, 128);
countryFlag[i].MouseHover += FormWorldFlags_MouseHover;
if (col + 1 == 8) {
row++;
col = 0;
} else
col++;
Controls.Add(countryFlag[i]);
}
}
private void FormWorldFlags_MouseHover(object sender, EventArgs e) {
ToolTip countryName = new ToolTip();
countryName.SetToolTip(?????)
}
}
};
提前非常感谢。
Joeri van der Heijden
将处理程序更改为以下内容:
private void FormWorldFlags_MouseHover(object sender, EventArgs e) {
ToolTip countryName = new ToolTip();
countryName.SetToolTip(sender, "country name");
}
如果您想访问处理程序中的数组,您可以将其从表单加载函数中移出。或者,您可以在加载图像时使用Tag属性,并访问处理程序中的值。