2013-06-05 24 views
2

因此,我只是嘗試繪製圖像和其他東西,但似乎我的代碼只適用於加載形式事件?如何在點擊事件中繪製圖像?

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace Interface_Editing_Test 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      //This works perfectly 
      /*Image i = Image.FromFile(@"C:\Users\Simon\Pictures\clickedbutton.jpg"); 
      Bitmap b = (Bitmap)panel1.BackgroundImage; 

      using (Graphics g = Graphics.FromImage(b)) 
      { 
       g.DrawImage(i, 0, 0, i.Size.Width, i.Size.Height); 
      }*/ 
     } 

     private void panel1_Click(object sender, EventArgs e) 
     { 
      //Doesnt draw anything, but will show the message box 
      Image i = Image.FromFile(@"C:\Users\Simon\Pictures\clickedbutton.jpg"); 
      Bitmap b = (Bitmap)panel1.BackgroundImage; 

      using (Graphics g = Graphics.FromImage(b)) 
      { 
       //MessageBox.Show(" "); 
       g.DrawImage(i, 0, 0, i.Size.Width, i.Size.Height); 
      } 
     } 
    } 
} 

我知道這是最有可能的東西簡單,我俯瞰,但我將不勝感激,如果有人能夠給我一些見解中發生了什麼。謝謝

回答

2

Windows不知道你改變了圖像。 Image類沒有任何人可以聽的事件,所以它知道圖像已被改變。它在Load事件中起作用,因爲該窗口尚不可見,所以在此之後它將被繪製。所以你可以看到改變後的圖像。它在Click事件處理程序中不起作用,因爲面板已經顯示並且沒有理由重新繪製自己。

只要告訴它重新粉刷是必需的。將下面這行代碼添加到方法的底部:

panel1.Invalidate(); 
+0

哈哈工作像一個魅力,感謝這一點。欣賞它:) –

1

看來,這是問題,他們涉及處理面板內的點擊事件,由於其內部的不同控制。

確保您的應用程序處理panel1_click事件。 (可能會通過調試器,你會知道它)。

由於不同的原因,例如面板上不同的控件存在等,應用程序可能無法處理此事件。

你可以參照有同樣的問題,你以下問題:

Panel events won't work in c#

Handling a click event anywhere inside a panel in C#

本工作實施例可能的GUID您:

private Bitmap _bmp = new Bitmap(250, 250); 

public Form1() 
{ 
    InitializeComponent(); 

    panel1.Click += new MouseEventHandler(panel1_Click); 
    panel1.Paint += new PaintEventHandler(panel1_Paint); 

    using (Graphics g = Graphics.FromImage(_bmp)) 
    g.Clear(SystemColors.Window); 
} 

private void panel1_Paint(object sender, PaintEventArgs e) 
{ 
    e.Graphics.DrawImage(_bmp, new Point(0, 0)); 

} 

private void panel1_Click(object sender, MouseEventArgs e) 
{ 
    using (Graphics g = Graphics.FromImage(_bmp)) 
    { 
    g.DrawString("Mouse Clicked Here!", panel1.Font, Brushes.Black, e.Location); 
    } 
    panel1.Invalidate(); 
} 
+0

嗯,面板事件正在執行我用幾個消息框測試它,而不是。然而,它看起來只是一個混亂的繪圖,我現在要嘗試你的例子,謝謝。 –

+0

@SimonTaylor好。嘗試一下。但是,如果設計混亂了,它不會幫助你。因爲它有助於如何處理事件。 – Freelancer

+0

是的,只是解決了這個問題。無論如何:/ –

相關問題