表单 ShowDialog 不会在图片框中加载图像

Form ShowDialog won't load image in picture box

当我使用 SHOWDIALOG 刷新我的表单时,我的图片没有加载到我的图片框中,但如果我仅使用 SHOW 刷新它,它工作正常。

我希望能够使用 SHOWDIALOG 刷新并且我的图片加载方法仍然有效。

我已经尝试清除图片框和眉毛按钮的数据绑定。

private void formrefresh()
{
     FoodItem FoodItem = new FoodItem();
     FoodItem.ShowDialog();
     this.Close();           
}

public void GetImage()
{
     OpenFileDialog BrowseImage = new OpenFileDialog();

     BrowseImage.Filter = "Image Files(*.jpg; *.gif;)|*.jpg; *.gif";

     if (BrowseImage.ShowDialog() == DialogResult.OK)
     {
          TextBox t = 
               Application.OpenForms["FoodItem"].Controls["imagePath"] as TextBox;
          t.Text = BrowseImage.FileName;
          filenametext = BrowseImage.FileName;
          PictureBox p = Application.OpenForms["FoodItem"].Controls["foodImage"] as PictureBox;

          p.Image = new Bitmap(BrowseImage.FileName);
     }

}

      private void BrowsImage_Click(object sender, EventArgs e)
      {
        GetFoodImage image = new GetFoodImage();

        image.GetImage();
     }

查找表单 (Application.OpenForms) 不是一个很好的使用方法。如果可能,尽量避免这种情况。例如,如果某个表单有多个实例,则可能会出现复杂情况,您将必须找到要更新的确切实例。

在您的示例中使用库来获取图像没有多大意义。如果您确实需要在单独的 Class 库中使用它,只需 return 路径即可。只需 return GetImage 方法中的图像路径并从 FoodImage 中设置 PictureBox。

private void formrefresh()
{
    FoodItem foodItem = new FoodItem();
     foodItem.ShowDialog();
     this.Close();           
}

private void BrowsImage_Click(object sender, EventArgs e)
{
  GetFoodImage image = new GetFoodImage();
  var imagePath = image.GetImage();
  this.foodImage.Image = new Bitmap(imagePath);
  this.imagePath.Text = imagePath;
 }

 public string GetImage(FoodItem foodItem)
 {
     OpenFileDialog BrowseImage = new OpenFileDialog();

     BrowseImage.Filter = "Image Files(*.jpg; *.gif;)|*.jpg; *.gif";

     if (BrowseImage.ShowDialog() == DialogResult.OK)
     {
           return BrowseImage.FileName;
     }        

     return "";
  }