none
Элемент не виден в чужом блоке RRS feed

  • Вопрос

  • Если нужно дам полный код.


    Бог движок на котором мы написаны, а Библия компилятор, и верующие постоянно компилируют себя в нём.

    20 апреля 2012 г. 17:02

Ответы

  • Всё верно: локальная переменная видна только в своей области видимости (здесь - метод).

    В данном случае достаточно сделать переменную полем класса:

    Label label1;
    
    private void button1_Click(object sender, EventArgs e)
    {
        label1 = new Label();
    }
    
    private void button2_Click(object sender, EventArgs e)
    {
        // здесь тоже можно использовать label1
    }

    • Помечено в качестве ответа Doctor Gordon 20 апреля 2012 г. 17:11
    • Снята пометка об ответе Doctor Gordon 22 апреля 2012 г. 16:53
    • Помечено в качестве ответа Doctor Gordon 22 апреля 2012 г. 16:53
    • Снята пометка об ответе Doctor Gordon 22 апреля 2012 г. 16:55
    • Помечено в качестве ответа Doctor Gordon 22 апреля 2012 г. 17:17
    20 апреля 2012 г. 17:10
  • "Извините, но мне нужно чтобы элемент создавался именно в методе." - так он и создаётся в Вашем методе, просто

    Label label1;

    это пустая ссылка, которой в последствии присваивается созданный вами объект (new Label()), и она будет ссылаться на этот объект, чтобы он был доступен из внешнего кода, как Вы и хотели. А пометку предыдущего ответа не зачем было снимать, он и есть точный ответ на вопрос.


    • Изменено YatajgaEditor 22 апреля 2012 г. 17:12
    • Помечено в качестве ответа Abolmasov Dmitry 23 апреля 2012 г. 6:05
    22 апреля 2012 г. 17:12
    Модератор

Все ответы

  • Всё верно: локальная переменная видна только в своей области видимости (здесь - метод).

    В данном случае достаточно сделать переменную полем класса:

    Label label1;
    
    private void button1_Click(object sender, EventArgs e)
    {
        label1 = new Label();
    }
    
    private void button2_Click(object sender, EventArgs e)
    {
        // здесь тоже можно использовать label1
    }

    • Помечено в качестве ответа Doctor Gordon 20 апреля 2012 г. 17:11
    • Снята пометка об ответе Doctor Gordon 22 апреля 2012 г. 16:53
    • Помечено в качестве ответа Doctor Gordon 22 апреля 2012 г. 16:53
    • Снята пометка об ответе Doctor Gordon 22 апреля 2012 г. 16:55
    • Помечено в качестве ответа Doctor Gordon 22 апреля 2012 г. 17:17
    20 апреля 2012 г. 17:10
  • Всё верно: локальная переменная видна только в своей области видимости (здесь - метод).

    В данном случае достаточно сделать переменную полем класса:

    Label label1;
    
    private void button1_Click(object sender, EventArgs e)
    {
        label1 = new Label();
    }
    
    private void button2_Click(object sender, EventArgs e)
    {
        // здесь тоже можно использовать label1
    }

    Извините, но мне нужно чтобы элемент создавался именно в методе.

    Бог движок на котором мы написаны, а Библия компилятор, и верующие постоянно компилируют себя в нём.

    22 апреля 2012 г. 16:56
  • "Извините, но мне нужно чтобы элемент создавался именно в методе." - так он и создаётся в Вашем методе, просто

    Label label1;

    это пустая ссылка, которой в последствии присваивается созданный вами объект (new Label()), и она будет ссылаться на этот объект, чтобы он был доступен из внешнего кода, как Вы и хотели. А пометку предыдущего ответа не зачем было снимать, он и есть точный ответ на вопрос.


    • Изменено YatajgaEditor 22 апреля 2012 г. 17:12
    • Помечено в качестве ответа Abolmasov Dmitry 23 апреля 2012 г. 6:05
    22 апреля 2012 г. 17:12
    Модератор
  • "Извините, но мне нужно чтобы элемент создавался именно в методе." - так он и создаётся в Вашем методе, просто

    Label label1;

    это пустая ссылка, которой в последствии присваивается созданный вами объект (new Label()), и она будет ссылаться на этот объект, чтобы он был доступен из внешнего кода, как Вы и хотели. А пометку предыдущего ответа не зачем было снимать, он и есть точный ответ на вопрос.


    Я бы сказал в чём проблема, но шась вышла другая проблема, следующий код не работает:


    Я нажимаю на форму, но картинка не появляется, а до этого всё было норма, не знаю из-за чего вдруг так стало.

    Бог движок на котором мы написаны, а Библия компилятор, и верующие постоянно компилируют себя в нём.


    22 апреля 2012 г. 17:25
  • Тут высшеизложенное непричём, просто нужно в конце вставлять элемент в форму так.

    pictures.Visible = true;
    this.Controls.Add(pictures);

    • Помечено в качестве ответа Doctor Gordon 22 апреля 2012 г. 17:48
    • Снята пометка об ответе Abolmasov Dmitry 23 апреля 2012 г. 6:05
    22 апреля 2012 г. 17:47
    Модератор
  • Отлично решил проблему, я писал вот так:

    PictureBox pictures = new PictureBox();

    а нужно было написать вот так:

    PictureBox pictures;

    Вот видео снятое мной на эту проблема, чтоб вы поняли меня, хотя это уже не важно, но для тех кому интересно вдруг:

    http://www.youtube.com/watch?v=fu_UcgUoZf4&feature=youtu.be


    Бог движок на котором мы написаны, а Библия компилятор, и верующие постоянно компилируют себя в нём.


    22 апреля 2012 г. 17:57
  • Хорошо, посмотрим.
    22 апреля 2012 г. 18:02
    Модератор
  • Спасибо что отметили ответ и нашли решение дополнительной проблемы и выложили его.

    Суть в том, что в первом случае вы по клику создавали новый PictureBox всегда и добавляли его на форму. А во втором случае вы повторно используете один уже созданный PictureBox.


    Для связи [mail]

    23 апреля 2012 г. 6:07