Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: C# Добавлено: 07.03.10 23:26  

Автор вопроса:  UnDeAdZak
Сорри за очередной вопрос по C#, но я совсем ничего немогу понять.
1)Как обратиться из одной формы, к контролу другой формы.
В ощемто, я на этот вопрос хочу получить решение, только на будущее, т.к. сейчас я просто на 2-й форме создал событие вызываемое из первой формы, но вот тут-то и вся ерунда! Я пишу:

public void Open_list(int Val1, int top)
{
   this.Left = 20 + Val1 * 100;
   this.Top = top + 276;
}

Однако!
1) какие бы я не ставил значения this.Left и this.Top, форма остаётся на одном и том-же месте!
2) В первой форме я пишу на клик мышою по форме:

Form2 form2 = new Form2();
form2.Hide();

Однако 2-я форма не исчезает(
Подскажите плиз что я делаю не так?

Ответить

  Ответы Всего ответов: 13  

Номер ответа: 1
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #1
Добавлено: 07.03.10 23:52
как-то все мутно, попробуй переформулировать вопрос, я что-то ничего не понял))

Ответить

Номер ответа: 2
Автор ответа:
 UnDeAdZak



Вопросов: 80
Ответов: 476
 Профиль | | #2 Добавлено: 08.03.10 10:07
Кароче, я создал событие на форме2, которое вызывается из формы1, показывает форму2 ,и устанавливает её в нужные координаты. Однако проявиться форма-то проявляется, но перелазить в другую точку не хочет, а также исчезать не хочет(

Ответить

Номер ответа: 3
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #3 Добавлено: 08.03.10 11:10
Кароче, я создал событие на форме2, которое вызывается из формы1

ты создал не событие, а метод.. называй вещи своими именами...

какие бы я не ставил значения this.Left и this.Top, форма остаётся на одном и том-же месте!

Все верно, ты должен перевести форму в режим ручного управления местоположением..

  1.  
  2. using System;
  3. using System.Drawing;
  4. using System.Windows.Forms;
  5.  
  6. namespace VbNetExample
  7. {
  8.     public partial class Form1 : Form
  9.     {
  10.         /// <summary>
  11.         /// Закрытая переменная для хранения ссылки на вторую форму
  12.         /// </summary>
  13.         private Form2 m_twoForm;
  14.  
  15.         public Form1()
  16.         {
  17.             InitializeComponent();
  18.         }
  19.  
  20.         protected override void OnShown(EventArgs e)
  21.         {
  22.             base.OnShown(e);
  23.             /* Создаем экземпляр формы */
  24.             m_twoForm = new Form2();
  25.  
  26.             /* Задаем режим ручного управления положением формы */
  27.             m_twoForm.StartPosition = FormStartPosition.Manual;
  28.             /* Задаем ее местоположение */
  29.             m_twoForm.Location = new Point(50, 75);
  30.  
  31.             /* Либо вызываешь какой то свой метод определенный на второй форме */
  32.             // m_twoForm.SetLocation(new Point(50, 75));
  33.             /* Для примера на второй форме создан такой  метод */
  34.             //public void SetLocation(Point pt)
  35.             //{
  36.             //    this.Location = pt;
  37.             //}
  38.  
  39.             /* Вот так можно обратиться к эл. управления на второй форме
  40.              * Но ты должен изменить зону видимости этого контрола установив
  41.              * свойство Modidiers = Internal или Public */
  42.             m_twoForm.buttonOk.Text = "&OK";
  43.  
  44.             /* Показываем вторую форму */
  45.             m_twoForm.Show();
  46.         }
  47.  
  48.         private void button1_Click(object sender, EventArgs e)
  49.         {
  50.             /* Прячем вторую форму */
  51.             if (m_twoForm != null && !m_twoForm.IsDisposed)
  52.                 m_twoForm.Hide();
  53.         }
  54.     }
  55. }
  56.  


Ответить

Номер ответа: 4
Автор ответа:
 UnDeAdZak



Вопросов: 80
Ответов: 476
 Профиль | | #4 Добавлено: 08.03.10 14:40
EROSНаверное я не совсем точно сказал.
1)

       private void button1_Click(object sender, EventArgs e)
        {
            /* Прячем вторую форму */
            if (m_twoForm != null && !m_twoForm.IsDisposed)
                m_twoForm.Hide();
        }

я так и делал(
2)Так Open-List, это метод со 2-й формы!который по идее должен её передвигать!

Ответить

Номер ответа: 5
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #5 Добавлено: 08.03.10 17:39
Если бы ты все так и делал то у тебя бы все работало..

Ответить

Номер ответа: 6
Автор ответа:
 s12



Вопросов: 24
Ответов: 363
 Профиль | | #6 Добавлено: 08.03.10 20:15
О! Танцы с бубном!!!
В Form1 добавляем.
  1. Form2 f = Application.OpenForms["Form2"] as Form2;
  2. f.MySub();

Где MySub - процедура в Form2 объявленная как public.

Ответить

Номер ответа: 7
Автор ответа:
 s12



Вопросов: 24
Ответов: 363
 Профиль | | #7 Добавлено: 08.03.10 20:15
Все как в vb6 :)

Ответить

Номер ответа: 8
Автор ответа:
 UnDeAdZak



Вопросов: 80
Ответов: 476
 Профиль | | #8 Добавлено: 09.03.10 07:34
EROS Так если бы работало, я бы не писал!

Ответить

Номер ответа: 9
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #9 Добавлено: 09.03.10 08:05
EROS Так если бы работало, я бы не писал!

Чудес на свете не бывает.. у меня то работает! :-) А это говорит о том, что ты где то накосячил.. Создай проект с 2 формами, в первую скопируй мой код и все сам увидишь..

Ответить

Номер ответа: 10
Автор ответа:
 s12



Вопросов: 24
Ответов: 363
 Профиль | | #10 Добавлено: 09.03.10 08:58
Люди, вы что? Задача-то элементарная.
Код 1 формы:
  1. private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.             //Создаем экземпляр формы и показываем его
  4.             Form f = new Form2();
  5.             f.Show();
  6.         }
  7.  
  8.         private void Form1_Click(object sender, EventArgs e)
  9.         {
  10.             //Выбираем все экземпляры Form2
  11.             Form2 f = Application.OpenForms["Form2"] as Form2;
  12.             //Выполняем процедуру принадлежащую Form2
  13.             f.MySub(150, 56);
  14.         }


Код Form2 (Форма перемещается и скрывается):
  1. public void MySub(int x, int y)
  2.         {
  3.             this.Location = new Point(x, y);
  4.             this.Hide();
  5.         }

Если что могу прислать проект, где все работает ;)

Ответить

Номер ответа: 11
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #11 Добавлено: 09.03.10 11:55
Люди, вы что? Задача-то элементарная.

а кто говорил что задача сложная? просто у кого то руки кривые... Кроме того я предпочитаю не использовать подобные конструкции Form2 f = Application.OpenForms["Form2"] as Form2; ввиду их неоднозначности.. Форм с таким именем может быть откруты сколько угодно, равно как и ни одной.. Правильнее всего хранить ссылку на нужный объект..

Ответить

Номер ответа: 12
Автор ответа:
 s12



Вопросов: 24
Ответов: 363
 Профиль | | #12 Добавлено: 09.03.10 20:04
Правильнее всего хранить ссылку на нужный объект..

Далеко не всегда и далеко не в c#. Для хранения ссылки придется создавать глобальный статический объект, что не всегда есть хорошо.
Форм с таким именем может быть откруты сколько угодно

Есть такая проблема, но я придерживаюсь мысли: одна форма - одна выполняемая операция, что исключает повторное открытие формы.
Так что, это дело вкуса :)

Ответить

Номер ответа: 13
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #13 Добавлено: 09.03.10 23:29
Далеко не всегда и далеко не в c#. Для хранения ссылки придется создавать глобальный статический объект, что не всегда есть хорошо.


я не стану с тобой тут спорить и в чем то тебя убеждать... это бесполезно...

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам