选择一个单选按钮打开带有所选图像的新表单

selecting a radiobutton opens new form with selected image

我有一个 winform c# 应用程序,用户可以在其中 select 来自各种 RadioButton,旁边有一个 ImageBox。 我想做的是,当 RadioButton 被 selected 时,相同的图像出现在另一个表单上以继续该过程。 基本上我需要的是将 selected 图像从 formA 中的 picturebox1 传输到 formB 中的 picturebox2

我现在的是这样的:

private void button1_Click(object sender, EventArgs e)
{
    if (radioButton1.Checked)
    {
        build build = new build(); 
        build.ShowDialog();
    }  
    else if (radioButton2.Checked)
    {

...

这只会打开包含 PictureBox 的表单 build 我想从 formA.

加载相同的图像

感谢支持,

编辑:

我尝试了 Mong Zhu 的解决方案,但是当我点击按钮时没有任何反应。我如何指示我要显示图片的图片框?我的代码是:

FormA:

private void button1_Click(object sender, EventArgs e)
{
    if (radioButton1.Checked)
    {
        build build = new build (@"/Images/2C.png");

表格 B:

public partial class build : Form
{
    string img = @"/Images/2C.png";
    public build(string img)
    {
        img = @"/Images/2C.png";
    }

编辑 2:

再次感谢您的帮助,所以我使用了您的代码,但现在出现以下错误:

An unhandled exception of type 'System.NullReferenceException' occurred in xxxx.exe Additional information: Object reference not set as an object instance.

编辑 3:

好的,所以,谢谢你的提示,代码进步了,但现在我收到以下错误:

An unhandled exception of type 'System.ArgumentException' occurred in System.Windows.Forms.dll

附加信息:路径中的字符无效。在行中:

pictureBox2.Load(img_from_A);

我想这是因为我使用的路径,图像存储在项目的 bin\Images 文件夹中,它们被添加到解决方案资源管理器中。

我使用的代码是:

 build build = new build("@|DataDirectory|/Images/JAF.jpg"); 

我也试过:

build build = new build("@../Images/JAF.jpg"); 

build build = new build("@/Images/JAF.jpg"); 

同样的错误。任何建议再次感谢。

您基本上需要的是 FormB 中的一个字段,例如:

string image_path;

然后您可以重写构造函数,并在 FormA 中调用它时将此路径传递给表单:

FormB formB = new FormB(image_path_from_formA);

然后构造函数将初始化该字段:

public FormB(string image_path_from_somewhere)
{
    image_path = image_path_from_somewhere;
}

现在您可以使用此路径将图像加载到 FormB

PictureBox

编辑:

我会尝试使用您的代码:

FormA:

private void button1_Click(object sender, EventArgs e)
{
    if (radioButton1.Checked)
    {
        build build = new build (@"/Images/2C.png");
    }
}

在 FormB 中,您可以存储路径供以后使用或立即加载图片:

public partial class build : Form
{
    // you don't need to initialize it. You will pass the right link
    // later through the constructor
    string img;

    public build(string img_from_A)
    {
        // store for later use
        img = img_from_A;

        // or load it right away
        pictureBox1.Load(img_from_A);
    }
}

编辑 2:

请确保在 InitializeComponent() 调用 之后尝试访问构造函数中的任何元素:

public partial class build : Form
{
    // you don't need to initialize it. You will pass the right link
    // later through the constructor
    string img;

    public build(string img_from_A)
    {
        // First this has to happen!
        InitializeComponent();


        // store for later use
        img = img_from_A;

        // or load it right away
        pictureBox1.Load(img_from_A);
    }
}

编辑 3:

如果您正在使用 windows 并且您的图像位于 bin\Images 文件夹中,您应该使用反斜杠 \ 而不是 / 并使用此行:

build build = new build("@..\Images\JAF.jpg");