• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C# Dynamiczne generowanie elementu/obiektu ze stringa

Object Storage Arubacloud
0 głosów
143 wizyt
pytanie zadane 5 października 2020 w C# przez troian1337 Użytkownik (720 p.)

Witam, jako iż nie jestem pewny czy tytuł prawidłowo oddaje istotę problemu postaram się go tutaj rozpisać.

Mianowicie w pliku xml chcę przechowywać informację o elementach interfejsu (Rodzaj elementu, jego położenie rozmiar itp) i tu się pojawia problem, bo chciałem w xml podać Nazwę obiektu, oraz w przypadku przycisków nazwę klasy do jakiej ma się odwołać.

Oto jak wyglądać ma przykładowy wpis w pliku xml:

<button y="10" x="10" width="200" height="50" event="StartButton_Click" name="StartButton" title="Uruchom" />

a oto jak teraz wygląda (na sztywno generowany interfejs)

this.StartButton = new System.Windows.Forms.Button();
[...]
this.StartButton.Location = new System.Drawing.Point(10, 10);
this.StartButton.Name = "StartButton";
this.StartButton.Size = new System.Drawing.Size(200, 50);
this.StartButton.TabIndex = 1;
this.StartButton.Text = "Uruchom";
this.StartButton.Click += new System.EventHandler(this.StartButton_Click);
this.StartButton.Enabled = false;
[...]
this.Controls.Add(this.StartButton);

Zabawa zaczyna się z tym tutaj this.StartButton << w tym miejscu chciałbym podać nazwę z xml'a, ten sam problem widnieje tutaj >> new System.EventHandler(this.StartButton_Click);

w skrócie chciałbym zrobić coś w stylu:

this.{xmlRead.GetAttribute('name')} = new System.Windows.Forms.Button();
this.{xmlRead.GetAttribute('name')} = new System.EventHandler(this.{xmlRead.GetAttribute('event')});

Coś podobnego jak można zrobić np w PHP:

${$key} = $value; 

Czy to jest w ogóle możliwe do zrealizowania? 

Mam nadzieje że klarownie opisałem efekt jaki chcę uzyskać, z góry dziękuje za wszelką pomoc smiley

PS. 

Wiem że mogę zrealizować to za pomocą if i sprawdzania czy dany przycisk istnieje, albo podmieniać tylko dane na temat pozycji X,Y oraz rozmiarów, ale wpierw chce się dowiedzieć czy mój pomysł na generowanie tego jest możliwy do wykonania wink

komentarz 5 października 2020 przez JakSky Stary wyjadacz (14,770 p.)

Może użyj refleksji: https://www.plukasiewicz.net/Csharp_dla_zaawansowanych/Refleksja

Dzięki temu możesz dynamicznie generować klasy wraz ze zmiennymi.

komentarz 5 października 2020 przez sunzi Bywalec (2,000 p.)

@troian1337, Zadam  pytanie trochę nie na temat. Ale może łatwiej by było zacząć od WPFa? Tam możesz tworzyć interfejsy w XMLu i dodatkowo jest to rozwiązanie stabilne, dojrzałe i bardzo rozbudowane. Czy może Twoje pytanie bardziej dotyczyło strony teoretycznej "czy jest to możliwe" a mniej interesuje Cię wykorzystanie praktyczne?

komentarz 5 października 2020 przez troian1337 Użytkownik (720 p.)

Chcę aby interfejs użytkownika znajdował się w pliku xml, tak aby użytkownik sam mógł modyfikować ułożenie elementów w programie, temu interesuje mnie bardziej wykorzystanie praktyczne niż teoretyczne gdybanie smiley Niestety jestem całkiem zielony jeżeli chodzi o C# więc nie miałem nawet pojęcia że istnieje coś takiego jak właśnie WPF. Zaraz sobie poczytam o tym i może będzie to dużo prostsze w implementacji niż refleksja, Na ten moment metoda refleksji jest dla mnie troszkę zbyt skompilowana angry Ale może właśnie WPF będzie prostsze w implementacji dla mnie :) Dzięki za kolejny pomysł! 

komentarz 7 października 2020 przez sunzi Bywalec (2,000 p.)


Szczerze Ci powiem, że nigdy nie robiłem czegoś takiego jak tworzenie zmiennych w locie. Mogę rzucić parę haseł które może Ci pomogą: wspomniana refleksja, dynamic keyword w C# (w szczeólności expando object) - na tą chwilę te dwie rzeczy mi przychodzą do głowy.

Dodam jeszcze od siebie komentarz. Generalnie C# pozwala na to i owo jeśli chodzi o czas wykonania, ale nie ma czego porównywać do języków interpretowanych (np. Python, Ruby, JS (nodejs)) w których można dużo więcej i łatwiej zrobić w czasie wykonania programu. Bo wydaje mi się, że tworzenie pól "w locie" w C# może byłoby i wykonalne ale przypuszczam, że końcowe wykonanie wymagać będzie wiele gimnastyki a i sam efekt pewnie nie będzie specjalnie elegancki, czytelny czy specjalnie rozwijalny na przyszłość. Także rzucam pomysł z językami interpretowanymi - zakładam, że tam takie sztuczki jak tworzenie dynamicznie tworzenie pól to bułka z masłem w tych językach wink

komentarz 8 października 2020 przez troian1337 Użytkownik (720 p.)
Możliwe, jednak jeszcze nie doszedłem do Etapu implementacji innego jeżyka celem wykonania interfejsu :( Na ten moment jest to po za moimi umiejętnościami :/

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
2 odpowiedzi 253 wizyt
pytanie zadane 20 lutego 2023 w C# przez marek.nowak404 Nowicjusz (220 p.)
+1 głos
2 odpowiedzi 250 wizyt
pytanie zadane 8 marca 2022 w C# przez xLipeq Nowicjusz (210 p.)
+1 głos
2 odpowiedzi 384 wizyt
pytanie zadane 21 października 2021 w C# przez Kamirru9 Początkujący (300 p.)

92,536 zapytań

141,377 odpowiedzi

319,452 komentarzy

61,920 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...