none
Verweis innerhalb von Form1.cs RRS feed

  • Frage

  • Hallo Leute,

    ich wollte mal fragen wie ich eine Art Verweis innerhalb von Form1.cs erstellen kann.

    Hier erstmal mein bisheriger Code:

            private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
            {
                About zeigen = new About();
                zeigen.Show(); 
            }
    
            private void toolStripMenuItem1_Click(object sender, EventArgs e)
            {
                //string filternum = "0";     Nicht länger nötig. Wird alles über die Arrays geregelt!!!
                string[] filtertext = { "", "Weapon OSP 1\r\n\r\nWeapon OSP 2", "Landscape OSP 1\r\n\r\nLandscape OSP 2" };
                this.ospnames.Text = filtertext[0];
            }
    
            private void weaponsToolStripMenuItem_Click(object sender, EventArgs e)
            {
                //0 = nichts; 2 = NAME DES OSPs; 3 = NAME DES OSPs;
                string[] waeponospnum = {"0", "1", "2"};
                string filternum = "1";
                string[] filtertext = { "", "Weapon OSP 1\r\n\r\nWeapon OSP 2", "Landscape OSP 1\r\n\r\nLandscape OSP 2" };
                this.ospnames.Text = filtertext[1];
            }
    
            private void landscapeToolStripMenuItem_Click(object sender, EventArgs e)
            {
                //0 = nichts; 2 = NAME DES OSPs; 3 = NAME DES OSPs;
                string[] landscapeospnum = { "0", "1", "2" };
                string filternum = "2";
                string[] filtertext = { "", "Weapon OSP 1\r\n\r\nWeapon OSP 2", "Landscape OSP 1\r\n\r\nLandscape OSP 2" };
                this.ospnames.Text = filtertext[2];
            }
    
            //unnötig!!!
            private void menuStrip2_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
            {
    
            }
            //unnötig!!!
    
            private void downloadbutton1_Click(object sender, EventArgs e)
            {
                if (filternum = "1");
                //und so weiter....
            }
        }
    }

    Das Problem ist, dass er bei der "if" Anweisung den Fehler anzeigt, dass die Variable "filternum" nicht zugewiesen wurde. Aber wie man oben sehen kann ist sie zugewiesen! Daher glaube ich, dass ich einen Verweis erstellen muss. Aber wie?

    mfg

    Timo


    Greetings Timo

    Montag, 11. März 2013 14:11

Antworten

  • Dein Code muss so aussehen:

    namespace FormApp
    {
    class Form1
    {
    private string filternum = "";
    private void aboutToolStripMenuItem_Click(object sender, EventArgs e) { About zeigen = new About(); zeigen.Show(); } private void toolStripMenuItem1_Click(object sender, EventArgs e) { //string filternum = "0"; Nicht länger nötig. Wird alles über die Arrays geregelt!!! string[] filtertext = { "", "Weapon OSP 1\r\n\r\nWeapon OSP 2", "Landscape OSP 1\r\n\r\nLandscape OSP 2" }; this.ospnames.Text = filtertext[0]; } private void weaponsToolStripMenuItem_Click(object sender, EventArgs e) { //0 = nichts; 2 = NAME DES OSPs; 3 = NAME DES OSPs; string[] waeponospnum = {"0", "1", "2"}; filternum = "1"; string[] filtertext = { "", "Weapon OSP 1\r\n\r\nWeapon OSP 2", "Landscape OSP 1\r\n\r\nLandscape OSP 2" }; this.ospnames.Text = filtertext[1]; } private void landscapeToolStripMenuItem_Click(object sender, EventArgs e) { //0 = nichts; 2 = NAME DES OSPs; 3 = NAME DES OSPs; string[] landscapeospnum = { "0", "1", "2" }; filternum = "2"; string[] filtertext = { "", "Weapon OSP 1\r\n\r\nWeapon OSP 2", "Landscape OSP 1\r\n\r\nLandscape OSP 2" }; this.ospnames.Text = filtertext[2]; } //unnötig!!! private void menuStrip2_ItemClicked(object sender, ToolStripItemClickedEventArgs e) { } //unnötig!!! private void downloadbutton1_Click(object sender, EventArgs e) { if (filternum = "1"); //und so weiter.... } } }

    Du musst die Deklaration der Variable in die Klasse verschieben. Dort kann man dann auch private usw. anwenden. Somit haben dann alle Methoden der Klasse zugriff auf die Variable.

    Vergiss jetzt bitte nicht den Konstruktor und deinen restlichen Code der Klasse wieder mit einzufügen :)


    Koopakiller [kuːpakɪllɐ]
    Webseite | Code Beispiele | Facebook | Snippets

    • Als Antwort markiert Timo Sö Montag, 11. März 2013 17:55
    Montag, 11. März 2013 17:07
    Moderator
  • Hi Timo,

    bei einem Vergleich musst du 2 Gleichzeichen benutzen "==".

    Hier mal ein bisschen zu schmökern kann sicher nicht schaden ;)

    MFG

    Björn

    • Als Antwort markiert Timo Sö Dienstag, 12. März 2013 12:50
    Montag, 11. März 2013 18:30

Alle Antworten

  • Hey,

    ich erstelle sie sehrwohl! Und zwar als normale Variable.

    Schau mal in den

     private void weaponsToolStripMenuItem_Click(object sender, EventArgs e)

    und den

    private void landscapeToolStripMenuItem_Click(object sender, EventArgs e)

    Bereich. Jeweils in der dritten Zeile erstelle ich die "filternum"-Variable.

    Trotzdem Danke.


    Greetings Timo


    • Bearbeitet Timo Sö Montag, 11. März 2013 14:23
    Montag, 11. März 2013 14:23
  • Hallo,

    so aber jetzt hoffe ich das richtige zu haben.

    Deine Variable Filternum ist überall privat und nicht in anderen Methoden sichtbar.

    Ich hoffe das dies richtig ist.

    Wollte mich auch mal in Antworten versuchen.

    grüße

    Cay

    Montag, 11. März 2013 14:25
  • Nun das kann gut sein. Aber wie mache ich die dann sichtbar? :)


    Greetings Timo

    Montag, 11. März 2013 14:26
  • Hallo,

    bin wie gesagt selber erst frisch in dieser Materie aber versuch mal anstatt privat void ein public void

    Oder definiere sie in der Form nicht in der Methode

    grüße

    Cay


    • Bearbeitet joksch_c Montag, 11. März 2013 14:36
    Montag, 11. März 2013 14:31
  • Mit public void habe ich es versucht. Aber der IDE hat nmir das gleich als Fehler angekreidet. In den Formabschnitt kann ich es nicht packen, weil sich der Wert der Variable ändern soll, sobald der entsprechende Menüpart angeklickt wird.

    Greetings Timo

    Montag, 11. März 2013 14:41
  • Hi,

    also folgendermaßen sollte es funktionieren:

    in der Form

    public string filternum;

    dann wird bei deinem Klick Ereignis in der Methode der Wert verändert.

    grüße

    Cay

    Montag, 11. März 2013 14:58
  • Ich kriege dann folgenden Fehlercode: "Ungültiger Asdruck "public".".

    Trotzdem Danke.


    Greetings Timo

    Montag, 11. März 2013 15:17
  • Hallo, zusammen, ich versuche mal die Verwirrung etwas aufzuräumen. Eine Variable (Feld) ist immer nur in dem Block verwendbar, in dem Sie erstellt wurde. Ein Block ist der Inhalt zwishcne { und }.

    Wenn du nun filternum in der Klasse erstellst, dann kannst du Sie überall verwenden:

    class Form1
    {
        public Form1()//Konstruktor
        {
            InitialisizeComponent();
        }
    
        string filternum = "";
    }

    Filternum ist in diesem Fall privat, wenn du nun noch public oder protected davor setzt wird die variable nach außen hin  zugreifbar. In deinem Fall reicht aber auch privat, da sich dein Code immer innerhalb der lasse abspielt.Nun darfst du aber die variable nicht in den Methoden neu erstellen. Heißt aus

            private void landscapeToolStripMenuItem_Click(object sender, EventArgs e)
            {
                //0 = nichts; 2 = NAME DES OSPs; 3 = NAME DES OSPs;
                string[] landscapeospnum = { "0", "1", "2" };
                string filternum = "2";

    wird

            private void landscapeToolStripMenuItem_Click(object sender, EventArgs e)
            {
                //0 = nichts; 2 = NAME DES OSPs; 3 = NAME DES OSPs;
                string[] landscapeospnum = { "0", "1", "2" };
                filternum = "2";

    Damit änderst du das Feld aus der Klassenebene. Um es besser deutlich zu machen kannst du aauch noch this. davor schreiben. this ist die aktuelle Instanz der Klasse.

    Ich hoffe das hilft euch beiden ;)


    Koopakiller [kuːpakɪllɐ]
    Webseite | Code Beispiele | Facebook | Snippets

    Montag, 11. März 2013 15:54
    Moderator
  • Vielen Dank für deine ausführliche Antwort!

    Mir hilft das ungemein. Mein Visual Studio 2012 sagt jedoch weiterhin, dass es falsch ist. Ich habe davon mal ein Screenshotgemacht.

    Ich verstehe nicht warum mir VS sagt das das falsch ist...


    Greetings Timo

    Montag, 11. März 2013 16:04
  • Dein Code muss so aussehen:

    namespace FormApp
    {
    class Form1
    {
    private string filternum = "";
    private void aboutToolStripMenuItem_Click(object sender, EventArgs e) { About zeigen = new About(); zeigen.Show(); } private void toolStripMenuItem1_Click(object sender, EventArgs e) { //string filternum = "0"; Nicht länger nötig. Wird alles über die Arrays geregelt!!! string[] filtertext = { "", "Weapon OSP 1\r\n\r\nWeapon OSP 2", "Landscape OSP 1\r\n\r\nLandscape OSP 2" }; this.ospnames.Text = filtertext[0]; } private void weaponsToolStripMenuItem_Click(object sender, EventArgs e) { //0 = nichts; 2 = NAME DES OSPs; 3 = NAME DES OSPs; string[] waeponospnum = {"0", "1", "2"}; filternum = "1"; string[] filtertext = { "", "Weapon OSP 1\r\n\r\nWeapon OSP 2", "Landscape OSP 1\r\n\r\nLandscape OSP 2" }; this.ospnames.Text = filtertext[1]; } private void landscapeToolStripMenuItem_Click(object sender, EventArgs e) { //0 = nichts; 2 = NAME DES OSPs; 3 = NAME DES OSPs; string[] landscapeospnum = { "0", "1", "2" }; filternum = "2"; string[] filtertext = { "", "Weapon OSP 1\r\n\r\nWeapon OSP 2", "Landscape OSP 1\r\n\r\nLandscape OSP 2" }; this.ospnames.Text = filtertext[2]; } //unnötig!!! private void menuStrip2_ItemClicked(object sender, ToolStripItemClickedEventArgs e) { } //unnötig!!! private void downloadbutton1_Click(object sender, EventArgs e) { if (filternum = "1"); //und so weiter.... } } }

    Du musst die Deklaration der Variable in die Klasse verschieben. Dort kann man dann auch private usw. anwenden. Somit haben dann alle Methoden der Klasse zugriff auf die Variable.

    Vergiss jetzt bitte nicht den Konstruktor und deinen restlichen Code der Klasse wieder mit einzufügen :)


    Koopakiller [kuːpakɪllɐ]
    Webseite | Code Beispiele | Facebook | Snippets

    • Als Antwort markiert Timo Sö Montag, 11. März 2013 17:55
    Montag, 11. März 2013 17:07
    Moderator
  • Ah!

    Vielen Dank! Jetzt verstehe ich es. Und die Variable klappt jetzt auch super.

    Dafür meckert er jetzt mit meiner if-Anweisung. Er sagt:

    "Eine implizierte Konvertierung vom Typ "string" in "bool" ist nicht möglich."

    Wie kann ich denn jetzt dieses Problem lösen? muss ich vielleicht irgendetwas vor "filternum" in der if-Abfrage schreiben? Ich habe es bereits mit string probiert aber es ging nicht.


    Greetings Timo

    Montag, 11. März 2013 17:55
  • Du versuchst einen string mit einem bool zuvergleichen, sagt ja auch die Fehlermeldung. Ich nehme mal an das der string die Wörter True oder False enthält. Nun kannst du einfach .ToString() beim bool-Wert aufrufen um es zu vergleichen. An sich kommt es nur auf die Werte an.

    Koopakiller [kuːpakɪllɐ]
    Webseite | Code Beispiele | Facebook | Snippets

    Montag, 11. März 2013 18:05
    Moderator
  • Hi Timo,

    bei einem Vergleich musst du 2 Gleichzeichen benutzen "==".

    Hier mal ein bisschen zu schmökern kann sicher nicht schaden ;)

    MFG

    Björn

    • Als Antwort markiert Timo Sö Dienstag, 12. März 2013 12:50
    Montag, 11. März 2013 18:30
  • Danke Palin. Jetzt funktioniert es ohne Probleme.

    Den Link werde ich mir heute Abend mal in Ruhe anschauen.

    Ich benutze übrigens VisualStudio 2012.

    Koopakiller, mein string enthielt die Zahlen 0, 1, 2. Diese hat VS wohl als bool interpretiert.

    Aber danke für den .ToString()-Tip.


    Greetings Timo


    • Bearbeitet Timo Sö Dienstag, 12. März 2013 12:58
    Dienstag, 12. März 2013 12:50