我有很多图像和坐标,宽度和高度。将图片放入图片框中,然后发送坐标以在其上绘制矩形。面板上有许多图片框。
我将他们的路径发送到PicturePanel
类,同时使用一些坐标和宽度/高度属性来绘制矩形。但是,我的问题是,它绘制它,并立即删除它。如果我没有在每个图像后面放一个消息框,我看不到矩形。这是代码;
if (IsRun())
{
MessageBox.Show("rontool true");
Rectangle ee = drawARectangle(xCoor, yCoor, MainScreen.tempR.wid / ratioOfx, MainScreen.tempR.heig / ratioOfy); // I wrote this, it only creates and returns the rectangle.
//MessageBox.Show("x : " + xCoor + " y: " + yCoor + " width : " + (MainScreen.tempR.wid / ratioOfx) + " height: " + (MainScreen.tempR.heig / ratioOfy));
using (Pen pen = new Pen(Color.Red, 2))
{
pictureBox.CreateGraphics().DrawRectangle(pen, ee);
// e.Graphics.DrawRectangle(pen, ee);
}
}
这是
private void PictureBox_Paint(object sender, PaintEventArgs e).
for循环在另一个类中,创建一个picturebox,并初始化它的x,y等。但是,它会绘制并立即删除它。或者有时它甚至不会画画。
如果我没有在每张图片后面放一个留言箱,我甚至看不到矩形。你能救我吗?
答案 0 :(得分:4)
只要Windows要您绘制图片框,就会调用图片框绘制方法。看起来你有时只绘制矩形。
if (IsRun())
将代码更改为始终进行绘图。
即。此代码不会绘制矩形。本的例子将在哪里。
private bool _once = true;
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
if (_once)
{
Rectangle ee = new Rectangle(10, 10, 30, 30);
using (Pen pen = new Pen(Color.Red, 2))
{
e.Graphics.DrawRectangle(pen, ee);
}
_once = false;
}
}
答案 1 :(得分:3)
我不确定我是否完全理解您的问题,但如果您只想绘制一个矩形,则以下代码将执行此操作:
Private void pictureBox_Paint(object sender, PaintEventArgs e) {
Rectangle ee = new Rectangle(10, 10, 30, 30);
using (Pen pen = new Pen(Color.Red, 2)) {
e.Graphics.DrawRectangle(pen, ee);
}
}
答案 2 :(得分:1)
见下面的代码。为了演示代码,我添加了一个矩形而不是图片:
m = mqtt.Client("clientid", 120, "8266test", "password")
m:lwt("/lwt", "offline", 0, 0)
function main(client)
print("connected - at top of main")
m:publish("someval",12345,1,0, function(client)
rtctime.dsleep(SLEEP_USEC)
end)
end
m:on("connect", main)
m:on("offline", function(client) is_connected = false print ("offline") end)
m:connect(MQQT_SVR, 1883, 0, mainloop,
function(client, reason) print("failed reason: "..reason) end)