Michas Anfängerfragen...



  • Ic bin grad dieses eBook am durchlesen. Ist ziemlich umfangreich und von einem C#-Entwickler geschrieben.



  • Sagt mal Leute verstehe ich hier was net oder was??? 😕
    Wo liegt das Problem in Google nach einem Tutorial zu suchen und sich das mal anzulesen.

    Wenn ihr es checkt, arbeitet ihr das durch...
    Wenn net dann sucht ihr euch ein neues bis ihr fündig werdet.

    Also ein bissel selbstständigkeit wird man wohl noch verlangen können. Also ob ihr Angst hättet eure wertvolle Zeit mit irgendwelchen Tutorials zu verschwenden. man man man

    PS: Ist kein Angriff aber das muss man wirklich bei fast jedem Thread in diesem Forum sagen.



  • Hallo de_Bert,

    Danke erst mal für Deinen Tip!

    de_Bert schrieb:

    PS: Und du kannst mir nicht erzählen das das auf anderen Rechnern ein anderes Verhalten an den Tag legt. Das der Sourcecode ein weißes Fenster erzeugt ist auf allen Platformen zu 100% gegeben!!!

    Nein, nein, da haben wir uns falsch verstanden! Ich habe solche Spielereien noch nie unter Windowsprogrammierung gemacht!
    Da war alles noch MS-DOS! Oder sogar noch früher in Assembler auf dem C64 oder 80386SX (vor 16 Jahren oder so).

    Gruß,

    Micha



  • Versuch es mal mit.

    delegate void MoveButtonDelegate(Point location);
    private void MoveButton(Point pt)
    {
        if (button.InvokeRequired)
            button.Invoke(new MoveButtonDelegate(MoveButton), new object[] { pt });
        else
            button.Location = pt;
    }
    
    private void CalcButtonPosition()
    {
        while (true)
        {
            // Berechnung
            MoveButton(pt);
        }
    }
    
    private void button_Click(object sender, EventArgs e)
    {
        Thread thread = new Thread(new ThreadStart(CalcButtonPosition));
        thread.Start();
    }
    

    Der Code erhebt keinen Anspruch auf Vollständigkeit. Um Fehlerbehandlung und ein ordnetliches Beenden der App. musst Du Dich selbst noch kümmern.



  • Hallo Lyrix,

    Lyrix schrieb:

    Was ich noch empfehlen kann ist das tutorial von www.mycsharp.de !

    Diesen Kurs gehe ich jetzt gerade mal durch und finde:

    ...
    if(Name == "Bill Gates" && Passwort == "Microsoft")

    das geht bei mir nicht! Da schmeisst MS Visual C# 2005 Express Edition einen Fehler! "&&" kennt es nicht! und außerdem will es noch eine äußere Klammer haben!
    So ging es dann endlich:

    if((Name == "Bill Gates") & (Passwort == "Microsoft"))

    Ist Visual C# nicht gleich C# ?

    Gruß,

    Micha



  • Juhu

    Micha369 schrieb:

    Nein, nein, da haben wir uns falsch verstanden! Ich habe solche Spielereien noch nie unter Windowsprogrammierung gemacht!
    Da war alles noch MS-DOS! Oder sogar noch früher in Assembler auf dem C64 oder 80386SX (vor 16 Jahren oder so).

    stimmt zu der Zeit war das noch so:P aber die Dinge ändern sich ja bekanntermaßen schnell 😃

    sag mal was haste den in 16 jahren gemacht? Winterschlaf 😃 ???



  • [quote="de_Bert"]Juhu

    Micha369 schrieb:

    sag mal was haste den in 16 jahren gemacht? Winterschlaf 😃 ???

    *lol

    alles außer Programmieren (fast, jedenfalls)!

    Gesellschaftstanzen, Flugzeugmodellbau, Hausbau, Gardening, Computerspiele, Internetkrams, Hundesport, Aquaristik, Reisen, Lernen u.v.a.m., z.B. auch Arbeiten.

    Gruß,

    Micha



  • Micha369 schrieb:

    Gardening

    Jey eine neue Trendsportart 😃 Wenn ich einen hätte würde ich da wohl auch nur rumhängen und dem Gras beim Wachsen zusehen ^^

    Micha369 schrieb:

    Aquaristik

    What the fuck is this? Was ist den das? Habe ich noch nie gehört. Hat das was mit schwimmen in hauseigenen Aquarium zutun 😃 ????

    Okay okay ich hör ja schon auf den Thread Zweck zu entfremden 😃



  • if(Name == "Bill Gates" && Passwort == "Microsoft")

    das geht bei mir nicht! Da schmeisst MS Visual C# 2005 Express Edition einen Fehler! "&&" kennt es nicht! und außerdem will es noch eine äußere Klammer haben!
    So ging es dann endlich:

    Das geht.
    Hast du vielleicht vergessen die Attribute/Variablen zu erzeugen?

    string Name ="Bill Gates";
    string Passwort="Microsoft";
    
    if(Name == "Bill Gates" && Passwort == "Microsoft")
    {
       Console.WriteLine("Richtig");
    }
    


  • Hallo Leute,

    ich arbeite mit Visual C# 2005 Express Edition und möchte gern den Standartordner festlegen. Derzeit speichert mein Programm neue Projekte immer unter

    "C:\Dokumente und Einstellungen\Micha\Lokale Einstellungen\Anwendungsdaten\Temporary Projects\

    obwohl ich schon unter Optionen/Projekte und Projektmappen das Verzeichnis

    D:\Dokumente\Visual_C# festgelegt habe.

    festgelegt habe!

    Wo muß ich es denn nun festlegen?

    Danke!

    Gruß,

    Micha



  • Ich nutze nur VS 2003, das dürfte aber keine große Gurke spielen:

    Menü Extras / Optionen. Im Dialog links Umgebung / Projekte und Projektmappen auswählen. Dann kannst Du den Standardpfad ändern.

    Ist aber grundsätzlich wurscht, weil Du bei jeder Projekterstellung den Pfad selber definieren kannst. Du kannst das Projekt auch von Hand verschieben und dann neu im VS öffnen...

    PS.: ich komme auch noch aus der C64, Amiga-Zeit. Einer Zeit, als manche hier im Forum noch in die Windeln gemacht haben und ettliche noch nicht einmal einen schimmernden Funken in den Augen ihrer Eltern waren! 😉



  • Hallo Leute,

    ich versuche die ganze Zeit den Abschnitt üner Klassen zu verstehen und habe hier das Beispielprogramm von

    http://www.mycsharp.de/guide/home/index.html?http%3A//www.mycsharp.de/guide/home/home.html

    mal hineingestellt.
    Ich bekomme nämlich immer den Fehler:

    Fehler 1 Für das nicht statische Feld, die Methode oder die Eigenschaft "CKomplexeZahl.Addieren(CKomplexeZahl, CKomplexeZahl)" ist ein Objektverweis erforderlich. C:\Dokumente und Einstellungen\Micha\Lokale Einstellungen\Anwendungsdaten\Temporary Projects\Weitere_Uebungen\Program.cs 61 5 Weitere_Uebungen

    using System;
    
    public class CKomplexeZahl
    {
        private double Real;
        private double Imaginaer;
    
        public CKomplexeZahl()
            : this(0, 0)
        {
        }
    
        public CKomplexeZahl(double Real, double Imaginaer)
        {
            this.Real = Real;
            this.Imaginaer = Imaginaer;
        }
    
        public void SetReal(double a)
        {
            Real = a;
        }
    
        public void SetImaginaer(double b)
        {
            Imaginaer = b;
        }
    
        public double GetReal()
        {
            return Real;
        }
    
        public double GetImaginaer()
        {
            return Imaginaer;
        }
    
        public void Addieren(CKomplexeZahl EineZahl)
        {
            Real += EineZahl.Real;
            Imaginaer += EineZahl.Imaginaer;
        }
    
        public void Addieren(CKomplexeZahl ErsteZahl, CKomplexeZahl ZweiteZahl)
        {
            Real = ErsteZahl.Real + ZweiteZahl.Real;
            Imaginaer = ErsteZahl.Imaginaer + ZweiteZahl.Imaginaer;
        }
    
        public void WriteLine()
        {
            Console.WriteLine("{0} + {1} * i", Real, Imaginaer);
        }
    
      public static void Main()
      {
        CKomplexeZahl ErsteZahl = new CKomplexeZahl(2,3 );
        CKomplexeZahl ZweiteZahl = new CKomplexeZahl(1.5,2);
        Addieren(ErsteZahl, ZweiteZahl);
      }
    }
    

    Auffällig war mir gleich, dass der IntelliSense nicht ansprach, als ich ganz unten die Zeile Addieren(ErsteZahl..... schreiben wollte!

    Aber was da jetzt falsch ist? Keine Ahnung!

    Ich glaube, ich kapiere das nie!

    Danke für Eure Tips im Voraus!

    MfG.

    Micha



  • ErsteZahl.Addieren(ZweiteZahl);
    

    Die Fehlermeldung sagt doch schon alles 🙄



  • Noch mal zwei Fragen zu obigem Listing:

    1. Warum wurden dort die Methoden

    public void SetReal(double a)
        {
            Real = a;
        }
        public void SetImaginaer(double b)
        {
            Imaginaer = b;
        }
        public double GetReal()
        {
            return Real;
        }
        public double GetImaginaer()
        {
            return Imaginaer;
        }
    

    definiert?
    Ich benötige die doch garnicht, oder?

    2. Die Funktion (oder meinetwegen Methode)

    public void Addieren(CKomplexeZahl ErsteZahl, CKomplexeZahl ZweiteZahl)
        {
            Real = ErsteZahl.Real + ZweiteZahl.Real;
            Imaginaer = ErsteZahl.Imaginaer + ZweiteZahl.Imaginaer;
        }
    

    ist für mich irgendwie unlogisch!

    Normalerweise muß eine Addition immer einen Wert zurückgeben, sodaß ich schreiben kann

    c=addition(a,b);

    Und außerdem finde ich unlogisch, dass diese Addition-Methoden auf externe Variablen zugreifen.

    Für mich wäre viel logischer, dass Variablen an die Addition übergeben werden:
    z.B. mit

    c=Addition(a,b);

    und innerhalb dieser Addition diese beiden Daten verarbeitet werden und dann mittels Return zurückgegeben werden.

    Für mich ergibt diese Art der Programmierung immer noch keinen erkennbaren Sinn, oder Vorteil.
    Kann mir da jemand mal bitte helfen?

    Danke im Voraus!

    EDIT:
    im u.a. Listing kann man die Addition wenigstens mit

    Summe=Summe.Addieren(ErsteZahl,ZweiteZahl);
    

    aufrufen!

    Aber kamm man das Programm nicht umschreiben, sodaß man die Addition mit:

    Summe=Addieren(ErsteZahl,ZweiteZahl);
    

    aufrufen kann?

    using System;
    
    public class CKomplexeZahl
    {
        private double Real;
        private double Imaginaer;
    
        public CKomplexeZahl()
            : this(0, 0)
        {
        }
    
        public CKomplexeZahl(double Real, double Imaginaer)
        {
            this.Real = Real;
            this.Imaginaer = Imaginaer;
        }
    
        public void SetReal(double a)
        {
            Real = a;
        }
    
        public void SetImaginaer(double b)
        {
            Imaginaer = b;
        }
    
        public double GetReal()
        {
            return Real;
        }
    
        public double GetImaginaer()
        {
            return Imaginaer;
        }
    
        public void Addieren(CKomplexeZahl EineZahl)
        {
            Real += EineZahl.Real;
            Imaginaer += EineZahl.Imaginaer;
        }
    
        public CKomplexeZahl Addieren(CKomplexeZahl ErsteZahl, CKomplexeZahl ZweiteZahl)
        {
            CKomplexeZahl i = new CKomplexeZahl();
            i.Real=ErsteZahl.Real+ZweiteZahl.Real;
            i.Imaginaer = ErsteZahl.Imaginaer + ZweiteZahl.Imaginaer;
    
           return(i);
        }
    
        public void WriteLine()
        {
            Console.WriteLine("{0} + {1} * i", Real, Imaginaer);
        }
    
      public static void Main()
      {
        CKomplexeZahl ErsteZahl = new CKomplexeZahl(2,3 );
        CKomplexeZahl ZweiteZahl = new CKomplexeZahl(1.5,2);
        CKomplexeZahl Summe = new CKomplexeZahl(0, 0);
        Summe=Summe.Addieren(ErsteZahl,ZweiteZahl);
        //oder:
        //Summe=ErsteZahl.Addieren(ErsteZahl,ZweiteZahl);
        //was aber noch unlogischer aussieht!
        Summe.WriteLine();  
      }
    }
    

    Gruß,

    Micha



  • Zu 1:

    Das sind sogenannte get - setter Methoden. Man macht die Attribute private, so kann man von aussen nicht direkt darauf zugreifen, um Datensicherheit zu gewähren.
    Durch Get und Set Methoden kann man dann auf diese Attribute zugreifen. Datensicherheit ist aber dennoch noch gewährt.

    Mit Datensicherheit meine ich hierbei, dass man nicht zufällig innerhalb des Programms die Werte in den Attributen verändert.

    zu 2:

    Du kannst jede Methode umschreiben wenn du willst...



  • ok, zurück zu etwas einfacheren Dingen...
    Die Konsolenanwendung soll die Summe von 1 bis n berechnen, wobei n eingegeben werden muß.
    Ich möchte jetzt sicherstellen, dass Fehleingaben (also z.B. -34 oder 20d)abgefangen werden.

    Gibt es eine elegantere Möglichkeit als im Listing gezeigt, die korrekte Eingabe des Anwenders abzufragen?

    using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace Konsole_test
    {
        class Program
        {
            static void Main(string[] args)
            {
                int n=0;
                int s=0;
                bool n_Ok;
                Console.WriteLine("Berechnet die Summe von 1 bis n!");
                Console.WriteLine("Geben Sie n ein (n>0):");
                do
                {
                    try
                    {
                        n = int.Parse(Console.ReadLine());
                        n_Ok = true;
                        if (n < 0)
                        {
                            n_Ok = false;
                            Console.WriteLine("Falsche Eingabe!");
                        }
                    }
                    catch
                    {
                        n_Ok = false;
                        Console.WriteLine("Falsche Eingabe!");
                    }
    
                } while (!n_Ok);
    
                for (int i = 0; i <= n; i++)
                {
                    s += i; 
                }
                Console.WriteLine("Summe ist {0}", s);
    
            }
        }
    }
    


  • Hallo Leute,

    Kann man eigentlich irgendwie Zeilennummern mit in die Listings einfügen?
    Man könnte sich in seinem Posting leichter auf bestimmte Zeilen im Code beziehen!

    In Visual C# 2005 Express Edition geht das ja, aber wenn man den Code hier herkopiert? Wie geht das dann?

    Zu meiner Frage:

    Wenn ich mit new eine Instanz von einer Klasse kreiere, dann durchläuft das Programm immer einen Konstruktor. Wenn keiner codiert wurde, dann eben intern den Standartkonstruktor.

    Die allgemeine Syntax sieht ja so aus:

    <Sichtbarkeit> <Klassenname> ([<Parameter>])

    {
    //Konstruktorcode
    }

    der Konstruktor ist doch eigentlich nichts anderes, als eine spezielle Methode. Er hat auch keine Angabe eines Rückgabetypes. Richtig?

    Nun noch mal zum Verständnis, was da abläuft, wenn man eine neue Windowsapplikation erstellt, ohne irgendetwas zu codieren.

    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;
    
    namespace viele_Textfelder
    {
        static class Program
        {
            /// <summary>
            /// Der Haupteinstiegspunkt für die Anwendung.
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Form1 f = new Form1();  // diese Zeile habe ich selbst eingefügt, 
                                        // um es besser verstehen zu können
                                        // in dieser Zeile springt er dann in
                                        //die Registerkarte "Form1.Designer.cs"
                Application.Run(f);
            }
        }
    }
    

    Ich dachte, er geht direkt zu dem Konstruktor für die Klasse Form1?

    Macht er aber nicht, er springt dann erst mal Zeile XX an in u.a. Listing!
    In dieser Zeile definiert er eine Variable. Aber warum geht er in diese Zeile?

    namespace viele_Textfelder
    {
        partial class Form1
        {
            /// <summary>
            /// Erforderliche Designervariable.
            /// </summary>
    XX      private System.ComponentModel.IContainer components = null;
    
            /// <summary>
            /// Verwendete Ressourcen bereinigen.
            /// </summary>
            /// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
    
            #region Vom Windows Form-Designer generierter Code
    
            /// <summary>
            /// Erforderliche Methode für die Designerunterstützung.
            /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
            /// </summary>
            private void InitializeComponent()
            {
                this.components = new System.ComponentModel.Container();
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.Text = "Form1";
            }
    
            #endregion
        }
    }
    

    Nachdem er diese eine Variable definiert hat, geht er dann wirklich in den Konstruktor der Klasse Form1. Dazu springt er wieder in die Registerkarte "Form1.cs" in Zeile **

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    
    namespace viele_Textfelder
    {
        public partial class Form1 : Form
        {
    **      public Form1()
            {
                InitializeComponent();
            }
        }
    }
    

    Mein Verständnisproblem schein mit der Aufteilung des Codes auf mehrere Registerkarten zusammenzuhängen!
    Kann man den kompletten Code zu einem Listing zusammenfügen und mal abarbeiten lassen?



  • Hallo Leute,

    noch eine Anfängerfrage:

    Warum sind die autogenerierten Kommentarzeilen manchmal in grau und manchmal in grün dargestellt?
    Haben die grauen eine besondere Bedeutung?

    Siehe hier:



  • Das ist einfach nur Teil vom Syntaxhighlighting.
    Dient der besseren Unterscheidung von relevanten und irrelevanten Informationen.



  • Das sind die XML Doku Kommentare. Grau sind die Tags und Grün ist der Text der dann ausgegeben wird wenn die Doku generiert wird. Zur anderen Frage: Er muss ja erst alle Klassenvariablen initialisieren, sonst könntest du ja im Konstruktor nie Klassenvariablen was zuweisen. Von daher stimmt die Reihenfolge wie er den Coe abarbeitet.


Anmelden zum Antworten