17 / 17 / 4
Регистрация: 19.06.2014
Сообщений: 85
1

Вызов метода класса Form1 из другого класса

23.06.2014, 12:14. Показов 11495. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace Space
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        public void GG(string a)  // вот этот метод вызвать
        {
            webBrowser1.Navigate(a);
        }
    }
 
    public class GW
    {
        string a;
        public GW(string a)
        {
            this.a = a;
        }
        public void Nav()          // вот этим методом
        {
            Form1.GG(a);
        }
    }
}
Помогите как мне из моего класса public class GW, вызвать методом public void Nav() - метод GG(string a);
Я понимаю что в этой Form1.GG(a); строке обращаюсь не к объекту формы, тк Form1 это класс
поэтому хотелось бы узнать как обратиться именно к объекту формы чтобы получить доступ к этому методу
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.06.2014, 12:14
Ответы с готовыми решениями:

Вызов метода из другого класса
Имеется проект TestEvents. В нём есть класс ClassCounter, содержащий в себе открытый метод Count()....

Вызов метода из другого класса
Добрый день Прошу помощи. На главной форме приложения в левой части находится DataGridView с...

Вызов метода из другого класса
Добрый день! Приложение спроектировано для почтовой службы и нужно рассчитать количество дней на...

Вызов метода в классе формы из класса другого проекта
Есть проект Project1 и Project2 - оба ClassLibrary. В Project1 происходит вызов форми из Project2...

22
Life Builder
532 / 496 / 374
Регистрация: 12.01.2011
Сообщений: 1,753
23.06.2014, 12:21 2
А так не подходит?
C#
1
2
Form1 f1 = new Form1();
f1.GG("https://www.cyberforum.ru");
0
17 / 17 / 4
Регистрация: 19.06.2014
Сообщений: 85
23.06.2014, 12:38  [ТС] 3
Ошибка 1 Не удалось найти имя типа или пространства имен "Form1" (пропущена директива using или ссылка на сборку?)

Добавлено через 2 минуты
я так понимаю студия содает объект моей формы автоматически и как получить ссылку на этот объект или его название я не представляю
0
993 / 891 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
23.06.2014, 12:39 4
Читаем Ответы на 7 самых частых вопросов по WinForms
0
17 / 17 / 4
Регистрация: 19.06.2014
Сообщений: 85
23.06.2014, 12:51  [ТС] 5
ткните носом прочитал и не нашел
как получить ссылку на этот объект формы или его название
0
993 / 891 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
23.06.2014, 13:04 6
naJlaguH, плохо читали.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    public class GW
    {
        string a;
        Form1 frm;
        public GW(string a, Form1 frm)
        {
            this.a = a;
            this.frm = frm;
        }
        public void Nav()          // вот этим методом
        {
            frm.GG(a);
        }
    }
0
17 / 17 / 4
Регистрация: 19.06.2014
Сообщений: 85
23.06.2014, 13:11  [ТС] 7
видимо не плохо тк такую конструкцию я пробовал
результатом было Не удалось найти имя типа или пространства имен "Form1"
0
993 / 891 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
23.06.2014, 13:13 8
Класс GW находится в той же области имён (namespace), что и Form1?
0
17 / 17 / 4
Регистрация: 19.06.2014
Сообщений: 85
23.06.2014, 13:19  [ТС] 9
нет не в той же в другой области
0
993 / 891 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
23.06.2014, 13:21 10
naJlaguH, хорошо, об этом Вам уже компилятор сказал.
Решений 2:
1) Указывать полное имя:
C#
1
Space.Form1
2) Использовать директиву using для того namespace, где необходимо видеть другие области:
C#
1
using Space;
0
17 / 17 / 4
Регистрация: 19.06.2014
Сообщений: 85
23.06.2014, 13:25  [ТС] 11
даже если я закидываю свой класс то же пространство имен то в результате компилятор ругается на
"System.Windows.Forms.Form" не содержит определения для "GG" и не был найден метод расширения "GG", принимающий тип "System.Windows.Forms.Form" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку)

Добавлено через 2 минуты
попробовал вынести из пространства имен и использовать using Space;
результат тот же
не содержит определения для "GG" и не был найден метод расширения "GG",
0
993 / 891 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
23.06.2014, 13:29 12
Лучший ответ Сообщение было отмечено naJlaguH как решение

Решение

Судя по ошибке, Вы не Form1 указываете, а Form в конструкторе класса...
1
31 / 30 / 13
Регистрация: 15.02.2014
Сообщений: 157
23.06.2014, 13:31 13
naJlaguH,
Я обычно делаю так

В Form1
C#
1
2
3
4
public static Form1 myForm;
....
//Инициализация 
myForm = this;
Теперь с любой формы можно обратиться так

C#
1
Form1.myForm.Любой элемент формы
1
17 / 17 / 4
Регистрация: 19.06.2014
Сообщений: 85
23.06.2014, 13:32  [ТС] 14
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
using Space;
 
namespace Space
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        public void GG(string a)
        {
            webBrowser1.Navigate(a);
        }
 
    }
 
 
}
 
public class GW
{
    string a;
    Form frm;
    public GW(string a, Form1 frm)
    {
        this.a = a;
        this.frm = frm;
    }
    public void Nav()
    {
 
        frm.GG(a);
    }
}
вот такой код дает ту ошибку
0
31 / 30 / 13
Регистрация: 15.02.2014
Сообщений: 157
23.06.2014, 13:34 15
Цитата Сообщение от naJlaguH Посмотреть сообщение
Form frm
, нужно

C#
1
Form1 frm
1
993 / 891 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
23.06.2014, 13:42 16
fast1kkk, лучше так не делать. В статику вгонять элементы управления не лучшая идея.
0
31 / 30 / 13
Регистрация: 15.02.2014
Сообщений: 157
23.06.2014, 13:44 17
Spawn, Почему? Чем статик плох?
0
Эксперт .NET
5490 / 4260 / 1211
Регистрация: 12.10.2013
Сообщений: 12,262
Записей в блоге: 2
23.06.2014, 13:45 18
fast1kkk, naJlaguH, в данной ситуации, ятд, лучший (и самый верный) способ - использовать event-ы.
0
17 / 17 / 4
Регистрация: 19.06.2014
Сообщений: 85
23.06.2014, 13:46  [ТС] 19
всем спасибо проблема решена
0
993 / 891 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
23.06.2014, 13:54 20
fast1kkk, как только появится второй экземпляр формы, будет сюрприз Не говоря уж о том, что доступно данное поле всем и каждому. При смене родительского элемента управления, у старого родителя элемент пропадёт. Если уж сильно хочется, реализуйте паттерн синглтон, правда в случае с Form это несовместимо с дизайнером.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.06.2014, 13:54
Помогаю со студенческими работами здесь

Как из другого класса управлять объектами класса Form1 ?
Добрый вечер, подскажите, пожалуйста. Создал форму Form1, создал отдельный класс (подписчик на одно...

Передача значения переменной из метода одного класса в метод другого класса
Добрый вечер! Есть основная форма Form1 в которой есть метод private void button1_Click(object...

Как получить доступ к элементам Form1 из другого класса
Здравствуйте! Нахожусь в начальных этапах обучения языку C# и конечно возникло много вопросов,...

Как обратиться к элементу Form1 из другого класса и потока?
class PTools:Form1 { label1.Invoke(new Action(() => label1.Text = "Текст")); } ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru