IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Ako preniesť hodnotu s i++ do inej triedy.

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
froshy
Člen
Avatar
froshy:14.7.2020 21:28

Ahojte snazim sa s tejto triedy menom ( Main_menu ) preniest hodnotu i++ do Form,

Kod main_menu:

string[] dirs = Directory.GetDirectories(@"application");
            foreach (string item2 in dirs)
            {
                FileInfo f = new FileInfo(item2);
                    i++;
                    Menu[i] = new PictureBox(); // Add to array
                    Menu[i].Location = new Point(i * 100, 0);
                    Menu[i].Size = new Size(100, 100); // Add to desktop
                    Menu[i].ForeColor = System.Drawing.Color.White;
                    Menu[i].Font = new Font("Times New Roman", 10, FontStyle.Regular);
                    Menu[i].BackColor = Color.Transparent;
                    Menu[i].Name = f.Name;
                    //Menu[i].MouseClick += BoxClick;                 // Click
                    Menu[i].MouseEnter += Menu_enter;
                    Menu[i].MouseLeave += Menu_color_transparent;
                    //Menu[i].MouseLeave += DisableLeftClickOnLeave;  // Click
                    try
                    {
                        Menu[i].BackgroundImage = Image.FromFile(@"application\" + f.Name + @"\" + f.Name + @".png");
                        Menu[i].BackgroundImageLayout = ImageLayout.Stretch;
                        dsk.Controls.Add(Menu[i]);
                    }
                    catch (Exception Error) { }
            }

Hore uvedenu triedu pripajam v hlavnom Form takto:

public partial class Desktop : Form
   {
       private Windows_controls wc;
       public Desktop()
       {
           wc = new Windows_controls();

           // Get desktop theme
           theme Theme = new theme();
           Theme.Get_theme(this);

           // Get desktop icons
           main_menu Menu = new main_menu();  <- to je tieda Main_menu
           Menu.Get_menu(this);


           InitializeComponent();
       }

Proste v triede main_menu vytvara ikony prislusnych programov, ktore najde v priecinku. Integer i rata pocet programov a stara sa o to aby ikony boli v spravnom poradi.

Chcem hodnotu s i nacitat v hlavnom programe a vzdy mi ukaze hodnotu 0. Potrebujem vediet kolko suborov napocital integer "i" aby som nasledne vedel presne vypocitat samostatny pohyb kurzora po obrazovke.

Zkusil jsem: Vsetko mozne od zvlast countera az po spocitanie poloziek v array.

Chci docílit: Vytváram program kde pomocou kapacitného senzora pripojene na PC môže paralyzovaní človek ovládať ktorý program chce spustiť

 
Odpovědět
14.7.2020 21:28
Avatar
zelvicek
Člen
Avatar
zelvicek:15.7.2020 8:08

Pokud jsem dobře pochopil problém:
1)

void Main() {var sth=Worker(out int count);} object Worker(out int count) {count=7; return null;}

2)

void Main() {var (sth,count)=Worker();} (object Sth,int Count) Worker() {return (null,7);}
 
Nahoru Odpovědět
15.7.2020 8:08
Avatar
froshy
Člen
Avatar
Odpovídá na zelvicek
froshy:16.7.2020 16:54

Nepochopil som ako to mam implementovat do programu, sice mi VS nehlasi chyby ale premene mi stoho nenacita.

 
Nahoru Odpovědět
16.7.2020 16:54
Avatar
JerryM
Člen
Avatar
JerryM:17.7.2020 8:57

ty tu hodnotu "i" chceš přenášet do tý třídy Form v každý iteraci cyklu foreach ???
ale chápeš že třída form nemá řízení v tom okamžiku a tak ti to bude k ničemu...
chápeš jo ? jestli náhodou spíš nechceš udělat nějakej samostatnej Thread a ten na to navázat ...

 
Nahoru Odpovědět
17.7.2020 8:57
Avatar
froshy
Člen
Avatar
Odpovídá na JerryM
froshy:17.7.2020 18:36

Dik za pomoc vyriesil som to trochu inak stacilo pridat toto:

public void Icon_counter()
      {
          string[] dir = Directory.GetDirectories(@"application");
          foreach (string item2 in dir)
          {
              Icon_count++;
          }
      }

V main form uz len staci:

main_menu mm = new main_menu();
            mm.Icon_counter();
 
Nahoru Odpovědět
17.7.2020 18:36
Avatar
zelvicek
Člen
Avatar
Odpovídá na froshy
zelvicek:18.7.2020 11:45

Takto opravdu ne.

  1. Neresetuješ field/property Icon_count před foreach smyčkou.
  2. Nešlo by nastavit Icon_count rovnou z dir.Length?
  3. Vážně by ses měl více pokusit ten počet nastavit už při generování toho menu - to o co ses pokoušel v dotazu.
 
Nahoru Odpovědět
18.7.2020 11:45
Avatar
froshy
Člen
Avatar
Odpovídá na zelvicek
froshy:22.7.2020 19:05

1, Field/property Icon_count je resetovany pred spustenim foreach ( tu cast nevidno ).
2, Mam to robene tak ze ked najde adresar vytvori ikonu v programe a pokracuje dalej, do kazdeho adresara, ktory najde vstupuje a hlada tam prislusne png.
3, Pocet je limitovany uz na par ikon, aby nedoslo k preteceniu adresaru.

 
Nahoru Odpovědět
22.7.2020 19:05
Avatar
Jan Stodůlka
Tvůrce
Avatar
Jan Stodůlka:27.7.2020 9:02

Nestačilo by místo počítání ++i použít něco takového:

i = Menu.Count;
Nahoru Odpovědět
27.7.2020 9:02
Nechodím do hospody, protože doma programuji.
Avatar
froshy
Člen
Avatar
Odpovídá na Jan Stodůlka
froshy:7.10.2020 17:48

Nie, nefunguje to tak.

 
Nahoru Odpovědět
7.10.2020 17:48
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.