2017-07-26 20 views
1

我試圖創建圖片框在運行時動態地與c# winforms。 我的項目:我想寫一個程序,其中有一個節點 - 圖形用戶界面(具有各種類型的節點,某些類型的盒子,它們連接在一起並處理圖像,音頻流或任何其他類型的GUI)。c#winforms在運行時動態創建圖片框不起作用

爲此,我想在運行時動態創建並刪除Pictureboxes,但我的測試不起作用,表單爲空。

這裏是我的代碼:

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

namespace AudioNodeGUI 
{ 
    public partial class AudioNodeWindow : Form 
    { 
     public AudioNodeWindow() 
     { 
      InitializeComponent(); 
     } 

     private void AudioNodeWindow_Load(object sender, EventArgs e) 
     { 

     } 

     private void AudioNodeWindow_Paint(object sender, PaintEventArgs e) 
     { 
     PictureBox start_picture = new PictureBox 
      { 
       Name = "pictureBox", 
       Size = new Size(19, 32), 
       Location = new Point(100, 100), 
       Visible = true, 
       Image = Bitmap.FromFile(@"C:\Users\Benjamin.MBENJAMIN\Pictures\Start.png"), 
      }; 
      start_picture.Show(); 
     } 
    } 
} 

請幫幫忙!

+4

認爲你需要將它添加到窗體控件。 – Stuart

+3

另外,我不認爲你應該把這個代碼放在窗體的'Paint'Event ... – Pikoh

+0

這些答案對@Ben有幫助嗎? – mjwills

回答

1

您需要將您創建的控件添加到Forms控件。

之前顯示()在PictureBox,嘗試加入這一行:

Controls.Add(start_picture); 

其次,你不想這樣做的OnPaint()!

我會說你需要將它移動到Load()方法,而不是每次它被重新繪製時,它會在表單加載時完成!

1

變化:

start_picture.Show(); 

到:

this.Controls.Add(start_picture); 
start_picture.Show(); 

Controls.Add告訴了PictureBox,就是要的這種具體形式部分的形式。

此外,您不希望在Paint事件處理程序中執行此操作。離開它就會導致更多的圖片框比你想我期待...

0

我不得不改變你的代碼:

PictureBox start_picture = new PictureBox 
     { 
      Name = "pictureBox", 
      Size = new Size(19, 32), 
      Location = new Point(100, 100), 
      Visible = true, 
      Image = Bitmap.FromFile(@"D:\test\learn.png"), 
     }; 
     //start_picture.Show(); 
     Controls.Add(start_picture); 
相關問題