2011-05-24 78 views
3

可以說我有兩種形式(Form1和Form2)。如何從對話框中更改Form1中的某些內容?

  • Form1上有一個PictureBox
  • 窗體2我有一個OpenFileDialog

Form1中是主要形式,所以,當我運行該項目,我看到Form1上。

如何從Form2更改Form1中的PictureBox中的圖像?

回答

1

你可以很簡單地做到這一點。 首先改變你的代碼(在Form1中),顯示窗體2到看起來像這樣:

<variable-of-type-Form2>.ShowDialog(this); 

,或者如果你不想窗口2是模態

<variable-of-type-Form2>.Show(this); 

下一頁時,你有路徑的圖像,你可以訪問的PictureBox這樣

((PictureBox)this.Owner.Controls["pictureBox1"]).Image=Image.FromFile(<filename>); 

假設您有圖片框在Form1上的名稱爲 「pictureBox1」

2

將一個窗體作爲參數傳遞給第二個窗體的構造函數,或添加一個傳遞該引用的方法。在你參考了你的表單之後,你可以用from來做任何你想要的。

是否將圖片框分享爲公衆會員取決於您。但是,我建議以第一種形式公開使用公共方法SetImage()。第二種形式將稱爲form1.SetImage()

[更新]

等待,爲什麼你需要從OpenFileDialog的設置圖像,你只需要在對話框中收到文件名,然後打開文件並加載到表單中。

像這樣:

private void button1_Click(object sender, EventArgs e) 
{ 
    using (var dialog = new OpenFileDialog()) 
    { 
     var result = dialog.ShowDialog(); 
     if (result != DialogResult.OK) 
      return; 
     pictureBox1.Image = Image.FromFile(dialog.FileName); 
    } 
} 

這是代碼Form1的內部。

[更新]

這裏的基本思想是如何從其他接入一種形式。

public class MyForm1 : Form 
{ 
    public MyForm1() 
    { 
     InitializeComponent(); 
    } 

    public void SetImage(Image image) 
    { 
     pictureBox1.Image = image; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     var form2 = new Form2(this); 
     form2.Show(); 
    } 
} 

public class MyForm2 : Form 
{ 
    private MyForm1 form1; 

    public MyForm2() 
    { 
     InitializeComponent(); 
    } 

    public MyForm2(MyForm1 form1) 
    { 
     this.form1 = form1; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     form1.SetImage(yourImage); 
    } 
} 
+0

你能更具體嗎? – Pedrum 2011-05-24 04:11:28

+0

這是重新解決問題的好辦法......除非您有要求以不同形式設置圖片。 – 2011-05-24 04:30:47

+0

我知道這個... 如何改變form1中picbox的圖片從form2 ...? – Pedrum 2011-05-24 04:53:45

1

理想情況下,您想要在ModelViewController模式中構造代碼。然後,只需在模型中爲圖片框中的圖片添加參考。當與Form2中的OpenFileDialog進行交互時,您可以調用模型適配器接口掛鉤到視圖(Form1和Form2)中以更改模型中的圖像。總之,您需要從視圖到模型的回調。如果您不想將代碼重新設計爲MVC,只需擁有一個共享對象來保存Form1和Form2在構造函數中接收的圖像引用,以便它們都可以對其進行修改。

2

在Program.cs文件中,您可以設置任何值,FormOptions或窗體的實例。

static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     var frm = new Form1(); 
     // Add the code to set the picturebox image url 
     Application.Run(frm); 
    } 

此外,您可以將構造函數添加到Form1並通過構造函數傳遞參數。

相關問題