2013-03-12 61 views
-1

下面是我遇到的問題,特別是其中的一部分**。我想在我的ImageViewer打開時調用方法「toolStripButton1_Click()」。就目前而言,打開ImageViewer時,所選圖像不會隨之打開。我已經公開了這個方法,希望能夠把它整理出來,但我沒有。C#聲明來自另一個類的方法

public partial class MediaPlayer : Form 
{ 

    public ImageViewer iv; 
    public AudioPlayer ap; 
    public VideoPlayer vp; 

    public MediaPlayer() 
    { 
     InitializeComponent(); 
    } 

    private void openToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     if (ofdSelectMedia.ShowDialog() == DialogResult.OK) 

      switch(ofdSelectMedia.FilterIndex){ 
       **case 1: new ImageViewer().Show(); public void toolStripButton1_Click(object sender, EventArgs e);** 
        break; 
       case 2: new AudioPlayer().Show(); 
        break; 
       case 3: new VideoPlayer().Show(); 
        break; 
     } 
    } 
} 

謝謝。

+0

什麼是確切的錯誤? – mariozski 2013-03-12 10:37:51

+0

toolstripbutton1_Click在哪裏申報?您在代碼示例中所做的全部是聲明新的方法簽名。你不會像你所想的那樣稱呼它。 – 2013-03-12 10:40:20

+3

你有什麼**打算**發生與案例1:新的ImageViewer()。 public void toolStripButton1_Click(object sender,EventArgs e);' - 這是無效的語法,所以問題變成:你試圖做什麼?你打算打電話給那種方法嗎?要麼...? – 2013-03-12 10:41:08

回答

0

試試這個..

public void toolStripButton1_Click(object sender, EventArgs e) 
{ 
somemethod(); 
} 

void somemethod() 
{ 
//your code which u want to execute on click of a button 
} 

在案例1調用該方法somemethod();而不是調用的事件。

0

將代碼從toolStripButton1_Click方法移動到一個函數,並從case子句和toolStripButton1_Click處理函數調用它。

private void DoIt() 
{ 
    // The code from the toolStripButton1_Click handler 
}  

private void toolStripButton1_Click(object sender, EventArgs e) 
{ 
    DoIt(); 
} 



private void openToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    if (ofdSelectMedia.ShowDialog() == DialogResult.OK) 

     switch(ofdSelectMedia.FilterIndex){ 
      case 1: new ImageViewer().Show(); 
       DoIt(); 
       break; 
      case 2: new AudioPlayer().Show(); 
       break; 
      case 3: new VideoPlayer().Show(); 
       break; 
    } 
} 
0

你在做什麼是方法聲明而不是方法調用。嘗試

switch(ofdSelectMedia.FilterIndex){ 
    case 1: new ImageViewer().Show(); 
     toolStripButton1_Click(sender, e); 
     break; 
    case 2: new AudioPlayer().Show(); 
     break; 
    case 3: new VideoPlayer().Show(); 
     break; 
} 
0

使用PerformClick()如下圖所示

public partial class MediaPlayer : Form 
{ 

public ImageViewer iv; 
public AudioPlayer ap; 
public VideoPlayer vp; 

public MediaPlayer() 
{ 
    InitializeComponent(); 
} 

private void openToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    if (ofdSelectMedia.ShowDialog() == DialogResult.OK) 

     switch(ofdSelectMedia.FilterIndex){ 
      case 1: 
       new ImageViewer().Show(); 
       toolStripButton1.PerformClick(); 
       break; 
      case 2: new AudioPlayer().Show(); 
       break; 
      case 3: new VideoPlayer().Show(); 
       break; 
    } 
} 
+0

謝謝你的幫助!這非常有用。它現在有效。 – user2160449 2013-03-12 11:01:47

0

聽起來像你打算是這樣的:

case 1: 
    var imgViewer = new ImageViewer(); 
    imgViewer.Show(); 
    imgViewer.toolStripButton1_Click(sender, e); 
    break; 

雖然就個人而言,我會重構ImageViewerShowImage方法或類似方法,使其成爲:

case 1: 
    var imgViewer = new ImageViewer() 
    imgViewer.Show(); 
    imgViewer.ShowImage(); 
    break; 

和你的ImageViewer有:

public void ShowImage() {...} 

void openToolStripMenuItem_Click(object sender, EventArgs e) { 
    ShowImage(); 
}