C# winform alkalmazás
2021-07-13T14:25:45+02:00
2021-07-14T21:26:50+02:00
2022-08-12T03:40:31+02:00
FRETENSIS
Sziasztok! Egy kis win formos alkalmazást készítek gyakorlás képen VS2019-ben! Azt szeretném elérni , hogy az első formos combox-ból  index alapján lefusson egy másik dolog a hozzá rendelt Battle.cs formon! Az első formon beállítottam publicra a combobox controlját  (propertynél: Modifies>>Public)! Az aktuális combobox-t elneveztem battlecruiser-nek és úgy tettem bele egy if elágazásba! Viszont futtatáskor csak az else ág fut le bármelyik indexű elemet is választom ki. De ebben az esetben azt szeretném elérni , hogy külön -külön messagebox jelenlen meg aszerint melyik indexű elemet választottam ki a comboboxban!



--------------------Battle.cs-----Második form amin kellene lefutnia a MessageBox-nak!----------------


using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

 

namespace UniverseOfWars

{

    public partial class Battle : Form

    {

        public Battle()

        {

            InitializeComponent();

        }

 

        public void csataButton_Click(object sender, EventArgs e)

        {

            Form1 csata = new Form1();

            if (csata.battlecruiser.SelectedIndex == 0)

            {

                MessageBox.Show("A csata elveszett: A megmarad csatacirkálók visszavonulnak a Braxis bolygó űrplatformjai felé!");

            }

            else

            {

                MessageBox.Show("Győzelem: Csapataink visszaverték az egyesített Protoss és Zerg csapatokat!");

            }

        }

    }

}
Mutasd a teljes hozzászólást!
Csatolt állomány
Szia!

Kezdem kapiskálni mit is szeretnél. Az első, és legfontosabb - szerintem -, hogy egy Form vezérlőit (a controllokat) sosem tesszük Publikussá, az maradjon csak meg a form számára. Van/lehet olyan eset, amikor szükséges "kívülről" változtatni, arra is megvannak a módszerek. Ha csak az érték kell (mint jelen esetben neked), akkor egyszerűen egy változóban tovább küldjük.

Módosítottam a programodat, tanulmányozd egy kicsit, szerintem rá fogsz jönni.
Mutasd a teljes hozzászólást!
Csatolt állomány

  • Szia!

    Nem teljesen értem mit is szeretnél pontosan csinálni, de itt a probléma:

      public void csataButton_Click(object sender, EventArgs e)

            {

                Form1 csata = new Form1();

                if (csata.battlecruiser.SelectedIndex == 0)

    A gomb lenyomására létrehozol egy új Form1-et, így a "battlecruiser" combó értéke -1 lesz, mert nincs kiválasztva semmi, ez miatt fut le mindig csak az "else" ág.

    Hogy minél egyszerűbb legyen, én átadnám az eredeti Form1 combóinak az értékeit a Battle formnak, vagy a constructorban, vagy egy method-ban.
    Mutasd a teljes hozzászólást!
  • Hol van így esélye a comboboxból kiválasztani valamit is a szergény usernek?
    Hiszen mint írták, abban a pillanatban jön létre mikor megnyomják a gombot....

    Nem kellene ennek a formnak már korábban léteznie?

    Ha létezik nem kell szűzen újra létrehozni, hanem onnan kellene kiolvasni a már beállított combobox indexét.
    Ha már van létező Form1 példány abból szedd ki az adatot, ne hozz létre új példányt.
    Mutasd a teljes hozzászólást!
  • Szia! Erre gondoltál? 
    Itt a Battle.cs-ben próbálom meghívni a a combobox indexeit! De végül is aláhúzza az if elágazásban a battlecruiser-t(a nevét a comboboxnak)! Publicra állítottam az összes comboxt!


    using System;

    using System.Collections.Generic;

    using System.ComponentModel;

    using System.Data;

    using System.Drawing;

    using System.Linq;

    using System.Text;

    using System.Threading.Tasks;

    using System.Windows.Forms;

     

    namespace UniverseOfWars

    {

        public partial class Battle : Form

        {

            public Battle()

            {

                InitializeComponent();

            }

     

            public void csataButton_Click(object sender, EventArgs e)

            {     

                if (battlecruiser.SelectedIndex == 0)

                {

     

                    MessageBox.Show("A csata elveszett: A megmarad csatacirkálók visszavonulnak a Braxis bolygó űrplatformjai felé!");

                }

                else

                {

                    MessageBox.Show("Győzelem: Csapataink visszaverték az egyesített Protoss és Zerg csapatokat!");

                }
            }

        }
    }
    ----------------------------------------És akkor így néz ki a Fő formom:-------------------------------


    using System;

    using System.Collections.Generic;

    using System.ComponentModel;

    using System.Data;

    using System.Drawing;

    using System.Linq;

    using System.Text;

    using System.Threading.Tasks;

    using System.Windows.Forms;

     
    namespace UniverseOfWars

    {

        public partial class Form1 : Form

        {

            public Form1()

            {

                InitializeComponent();

            }

            private void button1_Click(object sender, EventArgs e)

            {

                Hide();

                Battle FoForm = new Battle();

                FoForm.ShowDialog();

            }

            public void battlecruiser_SelectedIndexChanged(object sender, EventArgs e)

            {

               

            }

            private void Form1_Load(object sender, EventArgs e)

            {

            }

        }

    }
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Igazából tanulom és elnézést ha értetlen vagyok vagy nem teljesen tudok kérdezni! Igazából rájöttem kérdezni is meg kell tanulni ebben a szakmában! Tehát akkor felvázolom kicsit részletesebben.

    Van egy (Form1) fő form ablak amiben ha combobox-ból kiválasztunk egy értéket akkor a második Battle.cs formon gombra  le kellene futnia egy message boxnak az alapján amit a (Form1) fő form comboboxjából kiválasztott a user! 


    Az egyes comboxokat elneveztem a propertyben ami alapján szeretném elérni a Battle.cs-ben (második formból)! if elágazás alaján próbáltam kiválasztani a megfelelő indexet de aláhúzza :
    Másfelől a propertyben átállítottam publicra a Modifies-nél is a comboboxokat! 



    if (Form1.battlecrusier.SelectedIndex == 0)

                {
                    MessageBox.Show("A csata elveszett: A megmarad csatacirkálók visszavonulnak a Braxis bolygó űrplatformjai felé!");

                }

                else

                {

                    MessageBox.Show("Győzelem: Csapataink visszaverték az egyesített Protoss és Zerg csapatokat!");

                }
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Szia!

    Kezdem kapiskálni mit is szeretnél. Az első, és legfontosabb - szerintem -, hogy egy Form vezérlőit (a controllokat) sosem tesszük Publikussá, az maradjon csak meg a form számára. Van/lehet olyan eset, amikor szükséges "kívülről" változtatni, arra is megvannak a módszerek. Ha csak az érték kell (mint jelen esetben neked), akkor egyszerűen egy változóban tovább küldjük.

    Módosítottam a programodat, tanulmányozd egy kicsit, szerintem rá fogsz jönni.
    Mutasd a teljes hozzászólást!
    Csatolt állomány
abcd