2013-09-01 47 views
4

我在C#窗口中製作了一個基本的圖片瀏覽器程序,接下來是教程。 該程序工作正常,但我想打開它像默認的Windows照片瀏覽器。我試圖直接用程序打開一個圖像,但是打開了程序,圖像框是空的。將圖像直接打開到程序中

當圖像瀏覽到程序內部打開時,圖像框工作正常,但如何使其在外部工作?

額外:有沒有辦法使其全屏?

對不起,英語不好。

P.S:當我幫忙的時候,我很小心。謝謝:)

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

    private void showButton_Click(object sender, EventArgs e) 
    { 
     if (openFileDialog1.ShowDialog() == DialogResult.OK) 
     { 
      pictureBox1.Load(openFileDialog1.FileName); 
     } 
    } 

    private void clearButton_Click(object sender, EventArgs e) 
    { 
     pictureBox1.Image = null; 
    } 

    private void backgroundButton_Click(object sender, EventArgs e) 
    { 
     if (colorDialog1.ShowDialog() == DialogResult.OK) 
     { 
      pictureBox1.BackColor = colorDialog1.Color; 
     } 
    } 

    private void closeButton_Click(object sender, EventArgs e) 
    { 
     ActiveForm.Close(); 
    } 

    private void checkBox1_CheckedChanged(object sender, EventArgs e) 
    { 
     if (checkBox1.Checked) 
      pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; 
     else 
      pictureBox1.SizeMode = PictureBoxSizeMode.Normal; 
    } 

    private void openFileDialog1_FileOk(object sender, CancelEventArgs e) 
    { 

    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 

    } 

    private void rotateButton_Click(object sender, EventArgs e) 
    { 
     if (pictureBox1.Image != null) 
     { 
      Image img = pictureBox1.Image; 
      img.RotateFlip(RotateFlipType.Rotate90FlipNone); 
      pictureBox1.Image = img; 
     } 

    } 
} 
+1

http://stackoverflow.com/questions/1179532/how-do-i-pass -command-line-arguments-to-a-winforms-application顯示瞭如何獲得命令行參數,從那裏你可以將它們傳遞給填充images框的方法 – Lathejockey81

+0

你能否解釋它並幫助我實現在我的問題 –

+1

不是沒有一些代碼顯示它需要發生。鏈接中的示例顯示了您需要知道的獲取命令行參數的內容,並且我不知道在沒有代碼的情況下將它們發送到何處。 – Lathejockey81

回答

5

好了,所以在你的Program.cs文件,根據上述評論的鏈接貫徹條命令行參數,並將其傳遞到窗體。

[STAThread] 
    static void Main(string[] args) 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 

     if(args.Length > 0) 
      Application.Run(new Form1(args[0])); 
     else 
      Application.Run(new Form1()); 
    } 

然後在你的形式,試圖打開它之前的構造改變

public Form1(String fileName = null) 
{ 
    InitializeComponent(); 

    if (fileName != null) 
    { 
     // Add validation to ensure file exists here 
     this.WindowState = FormWindowState.Maximized; 
     pictureBox1.Load(fileName); 
    } 
} 

你要麼需要一個try/catch塊或東西來檢查文件是否存在。在您描述的用例下,我會將缺失的文件視爲一個特例,這對我來說似乎是一個計劃。

+0

我完全按照你的說法添加了它們,但是iam得到一些錯誤: 錯誤 'System.Array'不包含'length'的定義,並且沒有找到接受'System.Array'類型的第一個參數的擴展方法'length'。 錯誤2 \t'Basic_Picture_Viewer.Form1'不包含帶1個參數的構造函數 錯誤3和4:文件名在上下文中不存在 –

+0

Ugh。本週有太多的javascript ......計數是屬性 - 我會更新。對於第二個錯誤,您是否將可選屬性添加到Form1構造函數中? – Lathejockey81

+0

不......我應該怎麼做? –

2

語句public Form1(String fileName = null)指定了一個可選參數。可選參數是在函數中具有默認值的參數,如果指定任何參數,則始終可以選擇使用或不使用參數來調用函數代替默認參數,並且如果在調用函數時未指定參數,則使用缺省參數。optinal參數的缺省值必須始終爲編譯時的常量值。爲了更好地闡明let我舉一個例子。考慮我們有一個函數adds two numbers

private int AddNumbers(int a=10,int b=15) 
{ 
    int c=a+b; 
    return c; 
} 

我們指定的函數的兩個可選參數,上面的功能沒有任何標記錯誤,但正如我所說的,可選參數必須有一個默認值是知道在設計時,所以下面標記錯誤的功能它遵循Default parameter values must be compile time constant.,因爲它使用在運行時將會知道的默認值。

int z,x; 
private int AddNumbers(int a=z,int b=x) 
{ 
int c=a+b; 
return c; 
} 

認爲變量zx使用的是一些邏輯在運行時計算的,但不知道在將標記錯誤編譯time.This。

接下來,讓我告訴你在normal functionoptional parameters功能的差異。編譯沒有錯誤的第一個函數可以通過兩種方式調用;

**By passing some arguments when calling**

AddNumbers(5,15); 

這將返回20。

**By calling the function without specifying any arguments**

AddNumbers(); 

這將返回25,還記得我們定義10,15爲默認arguments.Both呼叫是有效的,將編譯沒有任何錯誤。

所以,現在我希望你找到回答你的問題,如果您想了解更多看看here.

相關問題