Как получить данные из одной формы в другую в C # - PullRequest
1 голос
/ 16 апреля 2011

Моя функция загружает изображение из выбранной папки. Теперь я хочу увеличить эту картинку, открыв ее в новой форме - ZoomLogo. В этой новой форме я хотел бы «получить» fullPath1 из моей основной формы, а затем загрузить изображение, используя этот путь в форме ZoomLogo. Как это сделать?

void Picture()
{

...

    if (DataBaseSelection.SelectedIndex+1==1) 
    {
    Logo1_pictureBox.Image=new Bitmap(@"Logos\\aa.bmp");
     var file1 = Path.ChangeExtension(Printer2_TextBox.Text, ".jpg");
    var fullPath1 = Path.Combine(@"Documents\\Base\\", file1);
    if (!File.Exists(fullPath1))
    {
    MessageBox.Show("No picture!");
    }
     else
    {
       Logo_pictureBox.Image = new Bitmap(fullPath1);
    }

...

}

Открыть новую форму:

    void ZoomPictureBoxClick(object sender, EventArgs e)
    {
        ZoomSchematic settings = new ZoomSchematic();
        settings.ShowDialog();          
    }

Я пытался использовать что-то подобное в своей основной форме:

    void ZoomPictureBoxClick(object sender, EventArgs e)
    {
        ZoomSchematic settings = new ZoomSchematic(this.fullPath1);
        settings.ShowDialog();          
    }

но я не знаю, как получить эту переменную из функции Picture () ..

Ответы [ 4 ]

0 голосов
/ 16 апреля 2011

Просто сделайте fullPath1 полем участника вашей главной формы.

 class MainForm
 {
     private string fullPath1;

     void Picture()
     {
        if (DataBaseSelection.SelectedIndex+1==1) 
        {
           Logo1_pictureBox.Image=new Bitmap(@"Logos\\aa.bmp");
           var file1 = Path.ChangeExtension(Printer2_TextBox.Text, ".jpg");
           fullPath1 = Path.Combine(@"Documents\\Base\\", file1);
           if (!File.Exists(fullPath1))
           {
              MessageBox.Show("No picture!");
           }
           else
           {
              Logo_pictureBox.Image = new Bitmap(fullPath1);
           }
        }
      }

     void ZoomPictureBoxClick(object sender, EventArgs e)
     {
         ZoomSchematic settings = new ZoomSchematic(this.fullPath1);
         settings.ShowDialog();          
     }
 }

 class ZoomSchematic
 {   
     string _fullPath1;

     public ZoomSchematic(string fullPath1)
     {
        _fullPath1 = fullPath1;
     }
 }
0 голосов
/ 16 апреля 2011

используйте конструктор формы для передачи пути к файлу

Form2 form2 = new Form2(string path);
Form2.ShowDialog();
0 голосов
/ 16 апреля 2011

это зависит от того, что делает Picture() и от того, как оно называется ... если картинка доставляет более одной картинки в вашу основную форму, вам придется разобраться, какая именно эта картинка ...

если это только одно изображение, вы можете просто добавить в свою форму новый элемент строки fullpath1, который нужно будет устанавливать каждый раз при вызове Picture() ...

0 голосов
/ 16 апреля 2011

Если вы действительно собираетесь увеличить изображение, почему бы не отправить изображение, а не перезагрузить его? Например,

void ZoomPictureBoxClick(Bitmap zoomthis)
{
...
}

как это будет в вашей форме, например,

ZoomSchematic settings = new ZoomSchematic(Logo_pictureBox.Image)

Это немного зависит от того, что вы хотите с ним сделать, если вы просто собираетесь показать настройки, я думаю, это зависит от того, зачем вам нужен путь.

Немного смелый ответ, но я чувствую, что вопрос открыт для дополнительных вопросов.

Если вам нужен путь для отправки позже, тогда, когда вы создаете свое растровое изображение, вы можете / должны удерживать путь. Вместо локальной переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...