C# 我可以在弹出窗口中画两样东西吗,一个图像和一个文本?
在C#中,我有一个表单(使用winforms),其中有一个包含数据的Gridview。当我将鼠标悬停在GridView中的单元格上时,我使用MouseEnter和MouseLeave事件弹出第二个表单,其中包含一个图像。我使用DrawImage将其与以下代码一起放置:C# 我可以在弹出窗口中画两样东西吗,一个图像和一个文本?,c#,gridview,C#,Gridview,在C#中,我有一个表单(使用winforms),其中有一个包含数据的Gridview。当我将鼠标悬停在GridView中的单元格上时,我使用MouseEnter和MouseLeave事件弹出第二个表单,其中包含一个图像。我使用DrawImage将其与以下代码一起放置: private void frm_MouseOverPicture_Paint(object sender, PaintEventArgs e) { Point MyPoint = new Poin
private void frm_MouseOverPicture_Paint(object sender, PaintEventArgs e)
{
Point MyPoint = new Point(250, 10);
Point MySecondPoint = new Point(10,10);
Font myFont = sender as Font;
Brush myBrush = sender as Brush;
Rectangle myRect = new Rectangle(250, 10, 500, 500);
Graphics g = e.Graphics;
Graphics g2 = e.Graphics;
Bitmap MyBitmap = new Bitmap(@"C:\Javie\IMAP0001.jpeg");
//g.DrawImage(MyBitmap, MyPoint.X, MyPoint.Y);
g.DrawImageUnscaledAndClipped(MyBitmap, myRect);
//g.DrawString("Hi", myFont, myBrush, MySecondPoint);
e.Graphics.DrawString("hi", myFont, myBrush, mySecondPoint);
}
我的问题是,当我尝试然后使用单独的DrawString方法添加字符串时,弹出表单中会出现一个大的红色X,好像我不能在同一表单中绘制两个东西(这只是一个控件,对吗?)。myFont和myBrush对象看起来不正确。尝试:
Font myFont = (sender as Form).Font;
Brush myBrush = new SolidBrush((sender as Form).ForeColor);
...
e.Graphics.DrawString("hi", myFont, myBrush, MySecondPoint);
假设发件人是表单,或直接创建它们:
using (Font myFont = new Font("Arial", 16))
{
using (Brush myBrush = new SolidBrush(Color.Blue))
{
using ( Bitmap MyBitmap = new Bitmap(@"C:\Javie\IMAP0001.jpeg"))
{
...
g.DrawString("hi", myFont, myBrush, MySecondPoint);
}
}
}
这并不能解决您的主要问题,但如果您不处理位图,最终将导致内存泄漏。使用语句将其包装在
中,或者(更好的做法是)在加载时将位图加载到本地字段中,这样您就不必在每次绘制表单时都从文件中加载它。不要调用DataGridView
aGridView
!!这是错误的,令人困惑的,肯定会得到错误的答案,浪费大家的时间。。总是用正确的名字来称呼事物!是的,要多打四个字母,但是在这里寻求帮助的时候可不是那么懒的时候-如果使用第二个选项,请确保在使用完字体和画笔后,最好通过using
语句处理它们。如果不这样做,您将经历内存泄漏。