Спасибо! Два дня убиты напрасно, т.к. с самого начала не хотелось смотреть видео, выданное гуглом. И совершенно напрасно. Автор - крут !
@yaniww2 жыл бұрын
Спасибо огромное. Самостоятельно изучаю C#, Ваши уроки очень помогают.
@okitkin Жыл бұрын
Огромная благодарность автору !!!!)))
@up93803 жыл бұрын
Помню, долго над этим вопросом бился. Но потом для себя методом проб и перебора вариантов открыл именно это способ, который показал Хачатур, и до сих пор его успешно использую.
@115-gagarin Жыл бұрын
Спасибо! Классная подача! Замучили меня эти формы ))))
@Random-go3jh2 жыл бұрын
Огромное спасибо... реально полезный контент... и уже голову сломал, как же не наплодить экземпляров форм ... теперь все работает, как надо.
@XpucT2 жыл бұрын
Скоро сниму ещё кое-что по этой теме =)
@pas9857 Жыл бұрын
@@XpucTдоброго времени суток. Подскажите, новое видео есть?
@aut0ritet4452 жыл бұрын
Как по мне есть более простой способ, я когда создаю новый проект всегда в классе Program пишу так: internal static class Program { public static FormMain? FormMain { get; private set; } [STAThread] private static void Main() { ApplicationConfiguration.Initialize(); FormMain = new(); Application.Run(FormMain); } } Теперь можно из любого места программы написать Program.FormMain.button1.text = "Блаблабла"
@XpucT2 жыл бұрын
Ничего не забыл в коде? =)
@vadymkon Жыл бұрын
Какая жесть. Я только упомянул в онлайн лекции в универе wforms, и тут же полилось в чате, "ну хотя бы wpf" и тд. от однокурсников. So scary atmosphere
@XpucT Жыл бұрын
=))
@vadymkon Жыл бұрын
@@XpucT да не радостно чето нифига, теперь ясно почему ты иногда в уроках отдельные блоки посвящаешь таким прик0листам
@XpucT Жыл бұрын
@@vadymkon Ты даже примерно не представляешь, как это достало. У Меня поток такой, что держись психика...
@vadymkon Жыл бұрын
@@XpucT в Ютубе вроде есть банворд для настроек комментариев. Можно закинуть туда wpf+лучше))0)
@igorthelight3 жыл бұрын
Для тех, для кого всё равно "не дошло": * Чтобы изменить что-то у Формы1, нужно к ней обратиться * Чтобы к ней обратиться, нужна ссылка на неё. У нашей Формы2 нет ссылки на Форму1. Никакой. * Для этого, при создании экземпляра Формы2, мы передаём ей ссылку на Форму1 (this - ссылка на себя). * А в Форме2, мы принимаем эту ссылку (в Конструкторе) и записываем в переменную типа Form1. * Теперь мы можем обратиться к Форме1 через эту новую переменную, которая хранит ссылку на Форму1, и поменять в ней всё, что мы могли бы поменять из самой Формы1.
@vadymkon Жыл бұрын
Спасибо!!!
@spacerecluse3 жыл бұрын
почитал комментарии ниже и понял, что народ ни типы данных, ни ООП совсем не учат. если б учили видео б им не понадобилось. такие видео это рыба а не удочка. автору же спасибо за труд, досмотрел зачем то до конца )
@ArchDevWorkshop2 жыл бұрын
Шикарное видео! На мой взгляд это лучшее решение.
@nesra0011 ай бұрын
Спасибо,все понятно и все работает,но можно вопрос.Как с кнопки form2 изменить переменную на form1, и как при нажатии кнопки с form1 менять кнопку form2?
@Ais_Hunt Жыл бұрын
хах, а Я то думал это и есть костыль, ссылка на родительский объект посылаемый в конструкторе класса дочернего объекта. Я пришел в C# из С++, и не придумал ничего лучше чем ссылаться на родительский объект, т.е. все формы, кнопки лейбы, это всё объекты у которых разный уровень доступа, видимости и т.д., а тут мы просто изворачиваем программу так что бы иметь доступ ко всем интересующим нас объектам и их свойствам, методам, событиям. Теперь буду и дальше использовать без опаски порицания)))
@ДанилТемежников2 жыл бұрын
Ооо, эта проблема жиза жизненная. Очень часто нужно было что-то подобное делать, по типу настроек каких то в дочернем окне, которые бы что-то меняли.. но насколько все сложно и неудобно было. Я тоже делал все через костыли, не такие как в видео, но все равно это ужасно было. И из-за этого у меня вообще отпало какое либо желание что-то в новой форме делать и потом максимально уже избегал новых форм и все пытался в одной вместить.. вот, ну а потом гуглил и да, нашел такое же решение как тут.. причем у меня знаний спокойно вообще хватало чтоб самому додуматься до этого, но я как-то вот не додумался.. так что да, это отличное решение, теперь всегда использую
@brainfood65803 жыл бұрын
Где это видео было раньше, я с wpf когда делал синхронизацию контролов, чисто случайно сидел думал как можно сделать, и решил попробовать подобное, и как я удивился когда это сработало. С одной стороны это хорошо что сам додумался, а с другой кучу времени убил. Делал это примерно так: Public static MainWindow Main; И в конструкторе указывал: Main = this; Думал что это костыль, но ты показал что нет, вполне нормальный способ.
@bakhtiyarov_dj Жыл бұрын
Благодарю вас. Спасли
@nightice64734 ай бұрын
Видео классное , премного благодарен
@Diana-xv5tl Жыл бұрын
очень помог, спасибо огромное😊
@ВячеславКурылев-т3й6 күн бұрын
еще один способ и менять видимость кнопки необязательно: //Form1: private void button1_Click(object sender, EventArgs e) { Form2 form2 = new Form2(); form2.Owner = this; form2.Show(); } //Form2: private void button1_Click(object sender, EventArgs e) { Owner.Controls["button1"].Text = "Ура!!!"; }
@cate-g7e11 ай бұрын
Хитрый способ. То есть мы в параметрах отправляем ссылку на форму (cамого себя или же родительское окно), а уже в дочерней форме эту ссылку используем. Спасибо, Хачатур!
@mus_catta9 ай бұрын
Большое спасибо!:)
@seal89102 жыл бұрын
Спасибо большое за видео и уроки я думал с ума сойду
@ИванКомаревич-е1т9 ай бұрын
Краса, не знаю що ще додати. На фоні більшості іт-блогерів ти крутий!
@НабиевАсылбек10 күн бұрын
Прикольная такая подача, похоже на хоба, хоба - Алик Марик шарик, видишь шарик а вот и нет шарика
@king_fox_31063 жыл бұрын
Блин, помню я ломал голову над подобным 😂 Я не додумался гуглить, но за то додумался использовать ваш метод к которому пришёл сам спустя пару дней 😅
@SHILY-PROJECT3 жыл бұрын
Серьёзно?! Это вообще законно?!O.o Я так-то давно с WinForms не работаю, но, в своё время, данного материала мне очень не хватало...:( Теперь буду знать:) Спасибо большое, Хачатур!:)
@Anton-Os3 жыл бұрын
Огромное спасибо!
@UFO262 жыл бұрын
Правильно ли я понимаю: нажатие на крестик [X] у созданного окна, не делает form2.visible = false; а отправляет к сборщику мусора? Я во второй форме в поле ввода текста ввожу этот самый текст, закрываю форму [X], открываю снова, а текста нет... - Мама, а собаки нет... - (С) Малыш и Карлсон. То есть получается мне надо создать метод FormClose(); отловить нажатие на [X] и вместо убийства формы, делать form2.visible = false?
@XpucT2 жыл бұрын
Да, форма полностью закрывается, мусор собран, формы больше нет. Если нужно сохранить данные второй формы, то нужно да, скрывать, а не закрывать.
@mikhailskylark84172 жыл бұрын
Привет, Хачатур! Писал тебе примерно месяц назад, что после переименования формы пропала функциональность "назад-вперёд" (а-ля ctrl+z и ctrl+y), ты порекомендовал пофиксить это тем, что переименовать через нотепад++ все остатки Form1 на новое название. Всё так и сделал, всё прекрасно работает... Только вот переменные Form1 всё-таки не видны)). Провёл эксперимент той же самой программы, но без переименования формы - всё работает и все переменные, так же как и методы, видны. У меня по кнопке формы1 запускается отдельный cs файл в новом потоке, и хоть я и могу передать в него Form1 f, криворучки из Майкрософт как-то так намудрили, что ни одна переменная главной формы всё равно не видна... Но зато методы видны, и я теперь под каждую свою нужду в изменении переменной накостылял кучу методов в основной форме, которые тупо меняют значение переменной, но через void метод.... Хачатур, точно никак не получится нормально переименовать форму с сохранением всех возможностей?) Я интернет опять таки обыскал, об этом почти никто не пишет, да если и пишут, то либо не по теме, либо не работает.
@XpucT2 жыл бұрын
Привет 🖐 Не помню, Тебе отвечал или нет, просто берёшь и во всех файлах с помощью Notepad++ меняешь имя Form1 на то, что нужно. Ну и сами файлы, если нужно. Метод рабочий и гарантированный.
@mikhailskylark84172 жыл бұрын
@@XpucT да, ты как раз мне про это отвечал - кароче, переменные всё равно не видны (грустный смайлик)
@mikhailskylark84172 жыл бұрын
@@XpucT Это я тупанул, переменную не нужно делать статической, только публичной, тогда к ней можно будет легко обратиться через owner.var = 5; Всё в итоге работает, спасибо!
@Official_Kelvin2 жыл бұрын
а как управлять сразу несколькими формами из одной формы🤔 я пытался добавить ещё нового овнера но не получается проект просто не компилируется
@XpucT2 жыл бұрын
Абсолютно также. Будет работать также.
@Official_Kelvin2 жыл бұрын
@@XpucT Я вот сколько пробую не получиться, может я не првельно вопрос задал, у меня есть Forms1, и я хочу открыть Forms2, но я хочу изменить не Forms1 из Forms2, а Forms 2 из Forms1.
@puser-yh9lv7kl1h3 жыл бұрын
Новых видосов от тебя не было, ждем ... Интересно было например, про яндекс диск, я как то делал на костылях, чтобы мои документы, рабочий стол и т.д. резервировались на яндекс диске, помню проблема еще была, считывал имена папок поочередно, ругался на мои рисунки и т.д. так так это были ссылки. Путь был типа Enviroment.Documents, чтобы не задавать вручную. Или что-нибудь про работу с глобальным буфером обмена, скриншотами. Про Linq и DataGrid через SQL интересно было бы. Или вообще про API telegram, выкачивать файлы с каналов. Как то так
@puser-yh9lv7kl1h3 жыл бұрын
найти бы еще как внедрить кнопки, безопасного извлечения флешек
@pro100chok3 жыл бұрын
Как раз искал решение, ахахах, просто мужик ты лучший!)
@prototyp3612 Жыл бұрын
а как сделать так чтоб 2-я кнопка нажималась а не менялся его название т.е. текст
@TheLjubin3 жыл бұрын
А я делаю так... В файле Program.cs - точька входа в программу, добавляю экземпляр класса нужного "окна" прямо в метод - static void Main() и после этого главное окно проги и то которое добавил - "видят друг друга". namespace Gyro { static class Program { internal static Main main; internal static selectAnotherCOMport selectCOMport; //------------------------------ второе окно. [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); main = new Main(); selectCOMport = new selectAnotherCOMport(); //------------------------------ второе окно. Application.Run(main); } } } Далее, например кликая по кнопке во втором окне, можно запустить метод в главном окне программы. private void btnOk_Click(object sender, EventArgs e) { this.Hide(); //Скрываем окно Program.main.viaUSB(); // Запускаем метод в основном окне программы. } Ну и у меня вопрос - Это вообще законно? )))
@XpucT3 жыл бұрын
Тоже интересно. Чуть ниже был ещё лайфхак, ещё короче =))
@Official_Kelvin2 жыл бұрын
Очень полезно давно хотел так зделать на WinForm а на Wpf переходить не хочю там трудно всё
@Brometey2 жыл бұрын
Почему у меня все равно пишет, что недоступно из-за уровня защиты(
@XpucT2 жыл бұрын
Пересмотрите видео. Фишка в модификаторе.
@Brometey2 жыл бұрын
@@XpucT укуси меня пчела, у вас батон в модификаторе публичный :)
@justdummy527 Жыл бұрын
Можно статический датабанк сделать и впихнвть туда нужные формы
@UFO262 жыл бұрын
Почему в шарпе для каждого поля, класса и метода надо писать public/private, почему Майкрософт не сделали как в плюсах: один раз написал и всё что ниже true или false. Так же экономнее.
@XpucT2 жыл бұрын
Можно не писать private. Я не пишу. По умолчанию это будет private.
@MysteryMarshak3 жыл бұрын
Привет, Хачатур 👋. Что скажешь насчет оптимизации памяти? Какие практики эффективны и какие сам используешь? Как лучше работать с изображениями, которые ты скачиваешь через вебклиент (или хттп веб реквест) и сохраняешь в виде списка? Если будет урок, то будет интересно посмотреть 👍🏻
@serpotapov3 жыл бұрын
В рамках уроков C# по ссылке ниже как раз пройден этап с using, с http запросами и прочими плюшками, которые не дают утекать памяти. kzbin.info/aero/PL05SB3rBbUsraqiEUeS70RKhVAu97nGeb
@Murad_A3 жыл бұрын
Здравствуйте Хачатур. Спасибо за ролик. Могли бы вы осветить тему пересылки данных например текста из приложения в стороннее приложение, и наоборот извлекать текст из стороннего приложения в свое реализовав это на С#. Особенно часто это бывает нужно для игр, браузерных и отдельных клиентских. Можно было бы создавать множество вспомогательных программ облегчающих процесс игры. Например из своего приложения отправлять текст в чат игры, и обратно из чата/журнала игры извлекать текст. Самая большая загвоздка как я понимаю получить доступ к стороннему окну приложения.
@Антон-о2р6ъ2 жыл бұрын
огонь!!!
@user-mcm3 жыл бұрын
Прикольно когда так херачил и был доволен 😌 хорошие видосы , отличная подача материала !
@86werth Жыл бұрын
Финальная версия 9:30
@okeJS356011 ай бұрын
христ, благословит тебя бог, хахах, наконец то нормальный способ, сука АААААААА, спасибо огромное
@stasbelka Жыл бұрын
Блин это конечно круто, но я пытался с шарпов перенести на плюсы но без успешно видимо я еще мало в программировании, буду у преподавателя спрашивать как это сделать, может на плюсах метод полегче есть
@agentsmit09 Жыл бұрын
Я почему-то при такое передачи формы владельца привожу в object. Наверное мне просто не нравится что-то вроде Form1 и т.д. в типе параметра. Но это чисто вкусовщина
@PravdaGe3 жыл бұрын
Привет, ХрисТ Благодарю за ещё один полезный урок , Скажи будут ли уроки на тему дизайна формы ТК в Русском Ютубе нет норманых уроков, И ещё скажи дизайн Win 10 Tweaker это (тема - skin ) или каждый элемент рисован отдельно , и очень интересно как ты сделал звук в форме .
@XpucT3 жыл бұрын
Привет 🖐 Тема дизайна уже раскрыта на вкладке Сообщество для спонсоров. Дал даже готовый проект. Новый проект с готовыми скинами и их быстрым изменением на очереди ;)
@loger_13283 жыл бұрын
Топчик! :)
@justmax1803 жыл бұрын
Все интересно, но можно говорить чуть помедленнее и четче