4

我按照教程在 C# windows 中制作了一个基本的图片查看器程序。该程序运行良好,但我想像默认的 Windows 照片查看器一样打开它。我试图直接用程序打开一个图像,但是打开了程序,图像框是空的。

当浏览图像以在程序内部打开时,图像框工作正常,但如何使其在外部工作?

额外:有没有办法让它全屏?

抱歉英语不好。

PS:帮助时认为我很菜鸟。谢谢 :)

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;
        }

    }
}
4

2 回答 2

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 块或其他东西来检查文件是否存在。在您描述的用例下,我会将丢失的文件视为例外情况,因此这对我来说似乎是一个计划。

于 2013-09-01T02:01:03.867 回答
2

该语句public Form1(String fileName = null)指定了一个可选参数。可选参数是在函数中具有默认值的参数,您始终可以选择带或不带参数调用函数,如果您指定任何参数,则使用新参数代替默认参数,并且如果您在调用函数时未指定参数,则使用默认参数。可选参数的默认值必须始终是编译时常量的值。为了更好地说明,让我举个例子。考虑我们有一个函数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在运行时使用一些逻辑计算,但在编译时不是未知的。这将标记错误。

接下来,让我告诉你 anormal function和 a 函数的区别optional parameters。第一个编译没有错误的函数可以通过两种方式调用;

**By passing some arguments when calling**

AddNumbers(5,15);

这将返回 20。

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

AddNumbers();

这将返回 25,请记住我们将 10,15 定义为默认参数。这两个调用都是有效的,并且将在没有任何错误的情况下编译。

所以现在我希望你已经找到了你的问题的答案,如果你想阅读更多,请看这里。

于 2013-09-01T09:30:26.467 回答