powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как сделать перменные видными
35 сообщений из 35, показаны все 2 страниц
Как сделать перменные видными
    #32367051
sadsaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как сделать перменные, вычисленные в одной FORM, видными в другой

И исчо, может кто подскажет где найти что нибудь почитать про функцию PRINT
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32367199
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
задекларировать их в классе формы как public например int - самый простой путь
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32369490
sadsaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как сделать ссылку на енту int в другой форме?
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32369563
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще это WinForms или Webforms?

============
общий подход

public class f1 {
public int i;
...
}

...

в другой сборке, классе...

f1 f = new f1();
int x = f.i; <-- f.i виден как public member класса f1
==============
если речь идёт о передаче значений из одной веб формы в другую, тогда всё по-другому, посмотрите на форуме
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32370633
Фотография SergLet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как же основопологающие принципы обьектноореинтированного программирования - инкапсуляция данных и защита ? Все похерить!
Обявлять переменные в классе как public полный отстой!!! :(
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32370685
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторОбявлять переменные в классе как public полный отстой!!! :(

Согласен, но вопрос был не о принципах ООП, поэтому я привёл самый п р о с т о й путь.

Кроме того, иной раз бывает просто лень писать свойство ради одного поля класса :(
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32370686
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю, что иногда (как пишут в "учебных" целях - но это не тот, конечно, случай) такой подход оправдан, хотя и с некоторыми натяжками.
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32370720
HFH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HFH
Гость
Прошу прощения за возможно глупый вопрос, но если свойство класса может быть get / set, то почему public переменная отстой?
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32370735
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласно ООП, с полями класса желательно работать через методы/свойства, которые делаются public, а поле обычно private, т.е. напрямую работать с полями не рекомендуется.

Хотя, опять же, если нельзя, но очень хочется, то можно.
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32370809
HFH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HFH
Гость
Так это постулат?
В случае если свойство только set(get) я еще понимаю, но в тут?!
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32370823
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2HFH

Почитайте Голуба http://prog.dax.ru/docs/cpprules/ Там очень хорошо про это написано
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32370945
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня ассоциация с фамилией "Голуб" - химия ;)
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32371282
sadsaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Енто все умно написано.
А как все таки мне написать-то?
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32371367
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2hDrummer

И что за химик Голуб? :)
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32372103
sadsaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С переменными я разобралси, спа.
Исчо один вопрос: Как закрытии Form2 запустить sqlDataAdapter.Fill(...); который находится в Form1?
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32372215
Фотография ctmike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГЫГЫ сделать DataAdapter public ;))
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32372219
Фотография SergLet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну давайте все сделаем public! Я вообще предлагаю прекратить использовать
ООП и перейти на классический ANSI C! А использовать события Windoze никто
не пробовал! Я вообще балдею! Нет вы все таки двошники!
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32372450
sadsaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может мне все таки кто нито черкнет поподробнее как писать то?!
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32372467
VAddIK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторНет вы все таки двошники!

Ну а все-таки, что плохого что адаптер будет public? Ну можно сказать, что внутренняя реализация класса будет видна, ну и что из этого? Если в проге нет никакого ноу-хау и она не будет продоваться в коробке какая разница public не public?
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32373153
HFH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HFH
Гость
to funikovyuri

К сожалению архив с сайта не распоковывается, буду признателен если намылите ее в читаемом виде на mi2k@mail.ru

Спасибо!
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32373175
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HFH

http://www.bibl.ru/c_cplyusplyus.htm

all
Чтобы подвести итог - цитата этого самого химика Голуба - никто лучше об этом не скажет
109. Все данные в определении класса должны быть закрытыми.
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32375053
sadsaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
бл, на свой глупый вопрос я получил столько умных ответов и ни одного конкретного.

Можа мне кто нибудь напишет как все енто сделать ( я имею в виду адаптер) Буду очень признателен если енто будет С КОДОМ!!!!!!!!!!!!!!!!!!.

P.S. Сразу хочу сказать насчет воших выссказываний и цитат из Голуба. Я все енто понимаю, но свою прогу я не собираюсь отправлять ни в какой Пакистан и проч. Ентой штукой пользуются ВСЕГО 5 ЧЕЛОВЕК. И БОЛЬШЕ НЕ БУДЕТ!!!!

Ну так я жду?

P.S.2 Кстати насчет объявления адаптера public , енто не работает. Можа я как то код не так написал. Ну тадЫ извините.
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32375823
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы не быть голословным - можно вот так...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
class Form1:...
{
private System.Data....DataAdapter theAdapter;

public void OnClick()
{
Form2 myForm2 = new Form2( theAdapter );
}
}

class Form2:...
{
public Form2( System.Data....DataAdapter remote_adapter )
{
remote_adapter.fill(...);
}

}



Но я рескну еще раз позанудствовать и отослать теперь к Бучу
3.2. Отношения между объектами : Видимость.
Там как раз все способы которыми один объект может видеть другой ;)
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32375885
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2funikovyuri

Если уж такая петрушка пошла, то м.б. объясните, зачем вообще давать возможность делать поля класса public?

Один + в сторону public полей я знаю - их использование более эффективно по скорости, чем использование, например, свойств. Да и в байт-коде выглядит, наверное (это предположение), покороче.

Я понимаю, что с точки зрения ООП делать так некорректно, поскольку нарушает один из основных столпов ООП (а именно инкапсуляцию) и не призываю огульно пользоваться public полями.

Но, чёрт возьми, если эта фишка есть, значит она зачем-то нужна? :)
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32375961
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hDrummer

Ну во-первых, это правило почему-то не для всех очевидно, к тому же профессиональные программисты судя по всему народ консервативный.
Вот например создатели Borland C++ Builder/delphi и MFC - вообще это правило игнорировали - т.е. например в Delphi все компоненты на форме - открытые члены данных - т.е. тот же Хейлсберг когда писал VCL - думал что Public - Это нормально - а когда он же писал C#/CLR - считал уже по-другому. Т.е. просто сменился стиль/подход к ООП

Т.е. раньше да и сейчас - public это то что многие продолжают использовать и не считаться с этим нельзя. Я полагаю в свое время это отомрет - но видно пока еще рано

Далее - public это часть концепции - хотите - используйте - никто мешать не будет - другой вопрос что надо понимать чем это чревато. Т.е. например есть правило что в C++ все параметры передающиеся по ссылке (&) должны быть const - но ведь никто не собирается делать это ограничением компилятора

Насчет скорости - в C++ есть inline и оптимизатор компилятора - так что там потери производительности нет. В .Net такую оптимизацию выполняет сам Jitter - так что я думаю там потерь тоже быть не должно.

PS> Я, например, - никогда потребности в public data members не замечал - но я не профессионал и тем более не исследователь/ученый - так что вполне возможно что есть и другие причины
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32375969
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, а вот что бывает с теми кто не слушал Голуба \r
\r
/topic/68553
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32378356
sadsaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
funikovyuri

Кстати так тоже не получается


а вот так

Form1 f = new Form1();

f.sqlDataAdapter1.fill(f.dataSet31);

вроде не ругается но и ничего не обновляет
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32378522
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuriно я не профессионал

судя по вашим постам я бы так не сказал :)
а какой у вас критерий профессионализма?
мне когда-то понравилось определение - "профессионал (имеется ввиду в чём-то) - тот, кто зарабатывает себе на жизнь своей профессией".

хотя в последнее время смысл этого слово сместился в сторону "высококлассный специалист", так же, как термина "хакер" - в сторону "электронный пират".
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32379611
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 sadsaf
Ты не описал свою задачу по идее при правильной организации проекта подобных проблем не должно возникать.

Могу предположить что в форме 2 находятся данные которые необходимо закинуть в базу данных.
Например есть форма 1 там datagrid на чтение, нажимаем кнопку изменить и в форме2 меняем данные, в форме2 нажимаек ОК изменения попадают в БД.

ИМХО тогда я бы :
1) На форме2 переменные не стал бы объявлять как public а обращался бы к ним через свойства
2) Открывал бы форму как модальный диалог а при закрытии делал бы что хотел с данными этой формы

Код обработчика кнопки "изменить" формы1
Пишу на VB.NET
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Dim f as Form = New Form2()
' Инициализация значений
f.Свойство1  = Значение
f.Свойство2 = значение 
Dim result as integer
' Открываем диалог
result = f.ShowDialog(Me)
if result = System.Windows.Forms.DialogResult.OK then
' Если диалог закрыли ОКем то 
  f.sqlDataAdapter1.fill(f.dataSet31)
  ' Считать новые значения 
  Me.m_newvalue1 = f.Свойство1
  Me.m_newvalue2 = f.Свойство2 
endif 


Не пинайте за VB.NET главное показать идею
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32382071
sadsaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мысль то верная тока как енто все написать на шарпе?

И мне нужно что бы данные (при закрытии форм1) сразу же отражались в гриде в форме2.
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32382994
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hDrummer

судя по вашим постам я бы так не сказал :)
Спасибо

профессионал (имеется ввиду в чём-то) - тот, кто зарабатывает себе на жизнь своей профессией

Если именно профессией - а то много как зарабатывают - у людей мимикрия развита неплохо :)
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32383965
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
Мысль то верная тока как енто все написать на шарпе?
И мне нужно что бы данные (при закрытии форм1) сразу же отражались в гриде в форме2.


Напиши поподробнее свою задачу , примерные данные, использованную СУБД в частности (запросы или хранимые процедуры), как выглядит форма 1 (какие данные, элементы управления используются) как выглядит форма 2 (анологично), судя по предыдущим постам картина четко не вырисовывается. Тогда можно что-нибудь и по конкретнее посоветовать.

За что люблю .NET есть множество решений одной и той же задачи.
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32384134
sadsaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В форм 1 есть грид с записями.

При добавлении новой записи открывается форм 2 с текстБоксами
При нажатии кнопки Добавить(кнопка находится в форм 2) данные должны попасть в базу данных(с ентим проблем не существует ) , а при нажатии кнопки EXIT форм2 должна закрыться, а данные должны сразу появится в гриде в форм 1.


//Form1


using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace transport_7._03sl
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
public System.Windows.Forms.DataGrid dataGrid1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.TextBox textBox2;
public System.Data.SqlClient.SqlDataAdapter sqlDataAdapter1;
public System.Data.SqlClient.SqlConnection sqlConnection1;
public transport_7._03sl.DataSet3 dataSet31;





//Добавление новой записи

private void button1_Click(object sender, System.EventArgs e)
{


Form2 f = new Form2();
f.Show();
}



//Form2

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace transport_7._03sl
{
/// <summary>
/// Summary description for Form2.
/// </summary>
public class Form2 : System.Windows.Forms.Form
{
private System.Data.SqlClient.SqlDataAdapter sqlDataAdapter1;
private System.Data.SqlClient.SqlConnection sqlConnection1;



//Кнопка сохранения записи


private void button2_Click(object sender, System.EventArgs e)
{
int k = dataGrid1.CurrentRowIndex.GetHashCode();

string filter = "id='" +
dataGrid1.CurrentRowIndex.ToString() + "'";

DataRow[] full = dataSet30111.full.Select(filter);
dataSet30111.full[k].BeginEdit();
dataSet30111.full[k]["Отправитель"] = textBox1.Text;
dataSet30111.full[k]["Груз"] = textBox2.Text;
dataSet30111.full[k]["Тип машины"] = textBox3.Text;



dataSet30111.full[k].EndEdit();
sqlDataAdapter2.Update(dataSet30111);
}



А вот тута начинается самое интересное
//Кнопка закрытия форм 2


private void button3_Click(object sender, System.EventArgs e)
{
frachtForm f1 = new frachtForm();

f1.sqlDataAdapter1.Fill(f1.dataSet31);



this.Close();
}
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32385602
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В форм 1 есть грид с записями.
При добавлении новой записи открывается форм 2 с текстБоксами
При нажатии кнопки Добавить(кнопка находится в форм 2) данные должны попасть в базу данных(с ентим проблем не существует ) , а при нажатии кнопки EXIT форм2 должна закрыться, а данные должны сразу появится в гриде в форм 1.


Если тебе не критично то пусть форма 2 будет модальной. С одной стороны это удобно так как навязывают пользователю отработать этот диалог. А не переключиться на другой оставив этот открытым.

Если форма 2 будет модальной то решение может быть следующим.
Во первых DataSet отвязанный источник данных поэтому совершенно не обязательно сразу же скидывать значения. в базу данных. Я бы в форме 2 работал только с dataset, про БД можно забыть. И также на форме2 помести две кнопки. ОК и CANCEL - у одной поставил DialogResult = OK у другой CANCEL.
В случае если пользователь понял что накосячил он нажимает на СANCEL в БД ничего не заносится.
В случае если все ОК пользователь нажимает кнопку ОК и только тогда я обновляю БД. данными из DATASET. При этом физически эта процедура находится не в форме2 а в форме 1.

Например, так.
Эта процедура вызываемая по нажатию кнопки ДОБАВИТЬ (Форма1 ):
Код: plaintext
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.
		private void btnAdd_Click(object sender, System.EventArgs e)
		{
			Form2 f2 = new Form2();
			int result;
			result = f2.ShowDialog(this);
			DataSet m_dataset = (dataset)dataGrid1.DataSource; // А это наш dataset я его беру прямо из dataGrid, 
			//можно любым другим способом и с этим же dataset и в этот же объект я должен вносить изменения в форме2
			if (result ==  System.Windows.Forms.DialogResult.OK)
			{
				// Это обозначает что в форме2 нажали кнопку ОК
				// проверим есть ли изменения в нем
				if (m_dataset.HasChanges(DataRowState.Added))
				{
					DataSet changedAddedDataSet = m_dataset.GetChanges(DAtaRowState.added); // Создадим новый dataset в который попадут все добавленные записи
					// Передадим в БД например следующей процедурой
					InsertRecordsInDB(changedDataSet,  "ИмяТаблицы" );
				    // В этой процедуре я могу в цикле пробежаться по записям таблицы  "ИмяТаблицы"  
					//и вызвать для каждой из них. Тут может находиться UPDATE или EXECUTENONQUERY
                    // Принять 
					m_dataset.Merge(changedDataSet); // Объединим DataSet с теми записями что добавили
                    m_dataset.AcceptChanges(); // Примем изменения, БД в частности могло проставить значение первичных ключей если они являются автогененрируемыми
				}
			}
			else
			{
				// Сюда я поподу если нажму кнопку CANCEL или закрою форму любым другим 
				// способом кроме как нажатием кнопки ОК
				// А здесь я просто отменю все изменения нафиг
				m_dataset.RejectChanges();
			}
		}




Стоит отметить что в форме2 никакого кода для доступа к БД не должно быть. Все делается в форме1 по аналогии но только с некоторыми НО можно сделать в форме1 обработку ИЗМЕНЕНИЯ данных, УДАЛЕНИЯ данных.
Никакие другие объекты при закрытии формы2 не создаются. Если тебе и хочется поработать с данными формы1 из формы2 . То если это модальной окно обратись к своему владельцу (Форма2.Owner) - это и будет форма1. (f2.ShowDialog(this); - this как раз устанавливает владельца модального диалога)

P.S. Если не хочется особо думать то воспользуйся DATAWIZARD и посмотри на автоматически сгенерированный код. В нем есть минусы но представление о том как работать с DataSet тебе даст.

Разницы что это C# или VB.NET нет - тут разница только в синтаксисе а работает все одинаково быстро.

В этом коде данные не запрашиваются никогда повторно, то есть полного REFRESH нет, а то представь что постоянно по сетке качать всю таблицу целиком. Мы работаем только с измененными данными их собственно отправляем в БД, и получаем кукиш если БД их не принимает (целостная ссылочность).

Советую почитать хорошую книжку по ADO.NET ( лучшие это от WROX красные книги с фотографиями авторов) Professional ADO.NET например.
...
Рейтинг: 0 / 0
Как сделать перменные видными
    #32385812
sadsaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за совет
Хотя по твоим записям я не совсем разобралси, но натолкнул ты меня на другое решение

private void button1_Click(object sender, System.EventArgs e)

{


zusammenForm f = new zusammenForm();
DialogResult result = f.ShowDialog(this);

switch(result)
{
case DialogResult.OK:

sqlDataAdapter1.Fill(dataSet31);
break;

case DialogResult.Cancel:
default:




break;




}


Спасибо
...
Рейтинг: 0 / 0
35 сообщений из 35, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как сделать перменные видными
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]