我应该在.NET/C#MouseOver方法中添加什么来在PictureBox上显示工具提示?

我应该在.NET/C#MouseOver方法中添加什么来在PictureBox上显示工具提示?,c#,.net,event-handling,tooltip,picturebox,C#,.net,Event Handling,Tooltip,Picturebox,下午好 我不熟悉面向对象编程、.NET和C。我正在研究前面提到的这些主题,目前正在做一个相对简单的编程任务,结果证明它毕竟不是那么简单,至少。。。对我来说仍然如此 我想创建一个Windows窗体应用程序,其中包含一个用国旗(.png,128px x 128px)填充的窗体。在形式_OnLoad()中,读取文件,并将标志存储在PictureBox对象数组中,并设置多个对象属性。然后将表格整齐地填写成8行。到目前为止还不错 问题: 我想在每个PictureBox上添加一个MouseOver事件处理程

下午好

我不熟悉面向对象编程、.NET和C。我正在研究前面提到的这些主题,目前正在做一个相对简单的编程任务,结果证明它毕竟不是那么简单,至少。。。对我来说仍然如此

我想创建一个Windows窗体应用程序,其中包含一个用国旗(.png,128px x 128px)填充的窗体。在形式_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:\Documents\Visual Studio 2017\Projects\ITvitae\WorldFlags\flags\";
            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(?????)
        }
    }
};
使用系统;
使用系统图;
使用System.IO;
使用System.Windows.Forms;
命名空间世界标志
{
公共部分类FormWorldFlags:表单{
public FormWorldFlags(){
初始化组件();
}
私有void Form1\u加载(对象发送方、事件参数e){
int col=0,row=0;
字符串imageDirectory=@“D:\Documents\Visual Studio 2017\Projects\ITvitae\WorldFlags\flags\”;
字符串[]imageFileList=目录.GetFiles(imageDirectory);
PictureBox[]countryFlag=新PictureBox[imageFileList.Length];
for(int i=0;i
非常感谢


Joeri van der Heijden将您的处理程序更改为以下内容:

private void FormWorldFlags_MouseHover(object sender, EventArgs e) {
    ToolTip countryName = new ToolTip();
    countryName.SetToolTip(sender, "country name");
}

如果要访问处理程序中的数组,可以将其移出form load函数。或者,您可以在加载图像时使用Tag属性,并访问处理程序中的值。

当您只得到一个文件列表时,您将从何处获取名称并不明显。考虑<代码>((图片框)发送者)。姓名< /代码>谢谢汉斯。就这样!令人惊叹的countryName.SetToolTip((PictureBox)发件人,((PictureBox)发件人).Name);