[closed][c#]The type or namespace name 'label2' could not be found

Lizabeth

чертовы 2 строчки не работают!
label2.Text+="продукт создан ";
panel1.Refresh;

хотя оба объекта созданы. пишет вот это
 d:\Mydoc\Visual Studio Projects\insurance\Form1.cs(204): 
The type or namespace name 'label2' could not be found
(are you missing a using directive or an assembly reference?)

может кто знает в чем дело?

timefim

может кто знает в чем дело?
Ищи строчку где определена переменная label2, есть вероятность что ты ее не найдешь.

Lizabeth

все так и есть. она в другом классе....
но все равно не работает,теперь пишет
d:\Mydoc\Visual Studio Projects\insurance\Form1.cs(204): An object reference is required for the nonstatic field, method, or property 'insurance.Form1.label2'
код такой
Form1.label2.Text+="продукт создан ";
Form1.panel1.Refresh;

timefim

Эта ошибка решается чтением хоть какой нибудь книги по C#.

Lizabeth


ок,тогда хоть тему скажи.на C# впервые прогаю,можно считать
P.S. в том-то и дело,что нет у меня таковой. может даст кто на день?

timefim

ок,тогда хоть тему скажи.на C# впервые прогаю,можно считать
Тема называется "Основы". На чем же ты до этого программировал?
что нет у меня таковой. может даст кто на день?

Прочти ebook спаси дерево.

Alexander08

Прочти ebook спаси дерево.

Lizabeth

спасибо тебе большое.а теперь завались
может есть кто поможет?

Alexander08

код покажи.

Lizabeth

думаю весь не стоит.
это в Form1(но не только это):
public System.Windows.Forms.Panel panel1;
public System.Windows.Forms.Label label2;
//
// panel1
//
this.panel1.Controls.Add(this.label2);
this.panel1.Location = new System.Drawing.Point(8, 16);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(280, 240);
this.panel1.TabIndex = 0;
this.panel1.Paint += new System.Windows.Forms.PaintEventHandler(this.panel1_Paint);
//
// label2
//
this.label2.Location = new System.Drawing.Point(64, 72);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(152, 112);
this.label2.TabIndex = 0;
this.label2.Text = "label2";
this.label2.Click += new System.EventHandler(this.label2_Click);
дальше другой класс
public class products// продукты страховой компании
{
public int max,deduct,mes_vznos,srok_dogovora;
products(int kon_mes_vznos,int kon_srok_dogovora,int kon_deduct,int kon_max)//конструктор,получение начальных данных
{
max=kon_max;
deduct=kon_deduct;
mes_vznos=kon_mes_vznos;
srok_dogovora=kon_srok_dogovora;
Form1.label2.Text+="продукт создан "; Form1.panel1.Refresh;
}
~products{ label2.Text+="умер продукт ";panel1.Refresh;}
void ch_max(int newmax)//изменяем максимальную сумму страх. возмещения
{
max=newmax;
}
void ch_deduct(int newdeduct)//сменить франшизу
{
deduct=newdeduct;
}
}

kruzer25

Я в C# (и вообще в C) не гуру, но ты тут, где обращаешься к panel1 - это panel1 _класса_ Form1 или _объекта_ Form1? И если второе - то откуда у тебя этот объект должен появиться внутри products::products?

Lizabeth

ну? неужели нет никого?

Lizabeth

public class Form1 : System.Windows.Forms.Form
откуда у тебя этот объект должен появиться внутри products::products?
блин,вопрос хороший..походу проблема имеено здесь сейчас попробую исправить

Lizabeth

что-то слишком много времени...
лучше перефразировать вопрос,так проще будет:
как вывести данные на окно?

Alexander08

Lizabeth

блин,я на unix'e прогал,только на консоль и в файл выводил. и понятия не имею как выводить в окно винды.чего смешного?

prosh123

Проблема в следующем: для того, чтобы обратиться к полю одного класса в другом, тебе нужно: 1) во-первых, чтобы это поле было объявлено как public(это у тебя есть)
2)далее нужно передать объект перового класса во второй, например, через конструктор:
пример:
class Form1
{
public Label label1;
}
class Test
{
Form1 f1;

publicTest(Form1 f1)
{
this.f1 = f1;
}
private void TestMethod
{
f1.label1.text="qqqqq";
}
}
А как ты хочешь сделать, это надо переменную объявлять статически, тогда будет тебе доступ через имя класса, но для элементов управления это, по-моему, не прокатывает.

prosh123

А по поводу вывода данных на окно: если ты работаешь в одном классе, то просто делаешь, как ты и написал:
class Form1
{
private Label label1;
private void TestMethod
{
label1.Text = "dsklfhalkserhf";
}
}

Lizabeth

с точки зрения C++ все здорово.но!
у тебя есть строка Form1 f1; у меня ее нет,но приложение работает..видимо из функции в классе Form1: :static void Main
{
Application.Run(new Form1;
}
понимаешь?и создается объект класса форм1.но как,блин,достать,этот объект?
а раз один такой объект создан,то создавать еще один такой-не есть хорошо

Andbar

либо из аппликейшна можно достать ссылку, либо модифицировать указанный код, что-то типа такого:
Application.Run(saveForm1 = new Form1;

prosh123

Немного не понял, что ты написал. Объект передается через ключевое слово this.
Вот простой пример:
class Form1
{
public Label label1;
private void TestMethodInForm1
{
Test test = new Test(this);
test.TestMethodInTest;
}
}
class Test
{
Form1 f1;

public Test(Form1 f1)
{
this.f1 = f1;
}
private void TestMethodInTest
{
f1.label1.text="qqqqq";
}
}

Lizabeth

Эта ошибка решается чтением хоть какой нибудь книги по C#.
беру свои слова обратно.ты был прав.на знаниях c++ не выкатишь тут. много чего узнал нового. самое главное- важность понятия static. прости,что грубо ответил
Оставить комментарий
Имя или ник:
Комментарий: