Visual Studio C# 2013

Triggerfish

Stammgast
Hallo zusammen

Ich stelle mich wohl gerade dumm an, das leider schon seit einigen Stunden, weswegen ich nach Rat frage...

Und zwar ist es so, dass wenn ich im Entwurfsmodus ein Element hinzufüge, und auf dieses einen Doppelklick ausführe, bevor ich es unbenannt habe (Eigenschaften, Name), so wird sinngemäss im Code beispielsweise die Methode button1_Click generiert. So weit so richtig.

Mache ich dasselbe mit einem Button, den ich im Entwurfsmodus bereits unbenannt habe, so generiert er mir eine Methode die er cmdBlabla_Click nennt. Auch richtig.

Wenn ich aber im Nachhinein den Namen ändern will, oder ein Element kopiere, da ich die Eigenschaften übernehmen möchte, so kann ich trotz der "Name"-Änderung den Namen im hinterlegten Code nicht mehr ändern. Dieser bleibt dann unveränderlich bestehen.

Komischerweise funktioniert der Code in der Form dann noch. (Obwohl die Bezeichnungen nicht mehr zueinander passen?) Oder ist der "Name" nicht die Eigenschaft, die den wirklichen Namen ausmacht? Komischerweise wird mir im Projektmappen-Explorer das Element richtig angezeigt also zb cmdBlabla : Button.
Bei den Methoden ist jedoch keine cmdBlabla_Click zu finden, sondern eben nur für button1_Click, oder gar button1_Click_1, button1_Click_2, usw, da ich Elemente kopiert habe.

Ist die Änderung des Elementnamens denn so abwegig, dass man es unterlassen sollte? Gibt's eine Einstellung, die mir eine "liveänderung" ermöglicht? Habe nun schon ewig damit rumgespielt, Forms gespeichert, Entwurf gespeichert, usw. Andere Reihenfolge, Debugger ausprobiert...

Im Form.Designer sind die Elemente übrigens auch nach einer Änderung korrekt beschriftet.

Form.cs
Code:
using System;
using System.Drawing;
using System.Windows.Forms;

namespace _1._5._3.Steuerelemente
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            cmdTest.Location = new Point(cmdTest.Location.X + 20, cmdTest.Location.Y);
        }

        private void cmdSizeRel_Click(object sender, EventArgs e)
        {
            cmdTest.Size = new Size(cmdTest.Size.Width + 20, cmdTest.Size.Height);
        }

        private void cmdTest_Click(object sender, EventArgs e)
        {

        }

        private void cmdSizeAbs_Click(object sender, EventArgs e)
        {
            cmdTest.Size = new Size(50, 100);
        }

        private void cmdPosAbs_Click(object sender, EventArgs e)
        {
            cmdTest.Location = new Point(100, 200);
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click_1(object sender, EventArgs e)
        {
            lblAnzeige.Text = "Position: X:" + cmdTest.Location.X + ", Y: " + cmdTest.Location.Y + "\n" + "Grösse: Breite: " + cmdTest.Size.Width + ", Höhe: " + cmdTest.Size.Height;
        }

        private void button1_Click_2(object sender, EventArgs e)
        {
            BackColor = Color.Yellow;
            lblAnzeige.BackColor = Color.FromArgb(192, 255, 0);
        }

        private void cmdFarbe2_Click(object sender, EventArgs e)
        {
            Close();

        }
    }
}

Form.Designer.cs
Code:
namespace _1._5._3.Steuerelemente
{
    partial class Form1
    {
        /// <summary>
        /// Erforderliche Designervariable.
        /// </summary>
        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.cmdPosRel = new System.Windows.Forms.Button();
            this.cmdSizeRel = new System.Windows.Forms.Button();
            this.cmdTest = new System.Windows.Forms.Button();
            this.cmdPosAbs = new System.Windows.Forms.Button();
            this.cmdSizeAbs = new System.Windows.Forms.Button();
            this.cmdAnzeige = new System.Windows.Forms.Button();
            this.lblAnzeige = new System.Windows.Forms.Label();
            this.cmdFarbe = new System.Windows.Forms.Button();
            this.cmdFarbe2 = new System.Windows.Forms.Button();
            this.SuspendLayout();
            // 
            // cmdPosRel
            // 
            this.cmdPosRel.Location = new System.Drawing.Point(12, 12);
            this.cmdPosRel.Name = "cmdPosRel";
            this.cmdPosRel.Size = new System.Drawing.Size(75, 23);
            this.cmdPosRel.TabIndex = 0;
            this.cmdPosRel.Text = "Position Rel";
            this.cmdPosRel.UseVisualStyleBackColor = true;
            this.cmdPosRel.Click += new System.EventHandler(this.button1_Click);
            // 
            // cmdSizeRel
            // 
            this.cmdSizeRel.Location = new System.Drawing.Point(107, 12);
            this.cmdSizeRel.Name = "cmdSizeRel";
            this.cmdSizeRel.Size = new System.Drawing.Size(75, 23);
            this.cmdSizeRel.TabIndex = 0;
            this.cmdSizeRel.Text = "Grösse Rel";
            this.cmdSizeRel.UseVisualStyleBackColor = true;
            this.cmdSizeRel.Click += new System.EventHandler(this.cmdSizeRel_Click);
            // 
            // cmdTest
            // 
            this.cmdTest.Location = new System.Drawing.Point(64, 179);
            this.cmdTest.Name = "cmdTest";
            this.cmdTest.Size = new System.Drawing.Size(75, 23);
            this.cmdTest.TabIndex = 0;
            this.cmdTest.Text = "Test";
            this.cmdTest.UseVisualStyleBackColor = true;
            this.cmdTest.Click += new System.EventHandler(this.cmdTest_Click);
            // 
            // cmdPosAbs
            // 
            this.cmdPosAbs.Location = new System.Drawing.Point(12, 54);
            this.cmdPosAbs.Name = "cmdPosAbs";
            this.cmdPosAbs.Size = new System.Drawing.Size(75, 23);
            this.cmdPosAbs.TabIndex = 0;
            this.cmdPosAbs.Text = "Position Abs";
            this.cmdPosAbs.UseVisualStyleBackColor = true;
            this.cmdPosAbs.Click += new System.EventHandler(this.cmdPosAbs_Click);
            // 
            // cmdSizeAbs
            // 
            this.cmdSizeAbs.Location = new System.Drawing.Point(107, 54);
            this.cmdSizeAbs.Name = "cmdSizeAbs";
            this.cmdSizeAbs.Size = new System.Drawing.Size(75, 23);
            this.cmdSizeAbs.TabIndex = 0;
            this.cmdSizeAbs.Text = "Grösse Abs";
            this.cmdSizeAbs.UseVisualStyleBackColor = true;
            this.cmdSizeAbs.Click += new System.EventHandler(this.cmdSizeAbs_Click);
            // 
            // cmdAnzeige
            // 
            this.cmdAnzeige.Location = new System.Drawing.Point(12, 92);
            this.cmdAnzeige.Name = "cmdAnzeige";
            this.cmdAnzeige.Size = new System.Drawing.Size(75, 23);
            this.cmdAnzeige.TabIndex = 1;
            this.cmdAnzeige.Text = "Anzeige";
            this.cmdAnzeige.UseVisualStyleBackColor = true;
            this.cmdAnzeige.Click += new System.EventHandler(this.button1_Click_1);
            // 
            // lblAnzeige
            // 
            this.lblAnzeige.AutoSize = true;
            this.lblAnzeige.Location = new System.Drawing.Point(104, 97);
            this.lblAnzeige.Name = "lblAnzeige";
            this.lblAnzeige.Size = new System.Drawing.Size(0, 13);
            this.lblAnzeige.TabIndex = 2;
            // 
            // cmdFarbe
            // 
            this.cmdFarbe.Location = new System.Drawing.Point(12, 132);
            this.cmdFarbe.Name = "cmdFarbe";
            this.cmdFarbe.Size = new System.Drawing.Size(75, 23);
            this.cmdFarbe.TabIndex = 3;
            this.cmdFarbe.Text = "Farbe";
            this.cmdFarbe.UseVisualStyleBackColor = true;
            this.cmdFarbe.Click += new System.EventHandler(this.button1_Click_2);
            // 
            // cmdFarbe2
            // 
            this.cmdFarbe2.Location = new System.Drawing.Point(161, 132);
            this.cmdFarbe2.Name = "cmdFarbe2";
            this.cmdFarbe2.Size = new System.Drawing.Size(75, 23);
            this.cmdFarbe2.TabIndex = 4;
            this.cmdFarbe2.Text = "Farbe";
            this.cmdFarbe2.UseVisualStyleBackColor = true;
            this.cmdFarbe2.Click += new System.EventHandler(this.cmdFarbe2_Click);
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(284, 261);
            this.Controls.Add(this.cmdFarbe2);
            this.Controls.Add(this.cmdFarbe);
            this.Controls.Add(this.lblAnzeige);
            this.Controls.Add(this.cmdAnzeige);
            this.Controls.Add(this.cmdSizeAbs);
            this.Controls.Add(this.cmdTest);
            this.Controls.Add(this.cmdPosAbs);
            this.Controls.Add(this.cmdSizeRel);
            this.Controls.Add(this.cmdPosRel);
            this.Name = "Form1";
            this.Text = "Form1";
            this.Load += new System.EventHandler(this.Form1_Load);
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        private System.Windows.Forms.Button cmdPosRel;
        private System.Windows.Forms.Button cmdSizeRel;
        private System.Windows.Forms.Button cmdTest;
        private System.Windows.Forms.Button cmdPosAbs;
        private System.Windows.Forms.Button cmdSizeAbs;
        private System.Windows.Forms.Button cmdAnzeige;
        private System.Windows.Forms.Label lblAnzeige;
        private System.Windows.Forms.Button cmdFarbe;
        private System.Windows.Forms.Button cmdFarbe2;
    }
}

Im Anhang befindet sich noch ein Bild, was für komische Zusammensetzungen VS hier gemacht hat.

Kann mir das jemand genauer erklären?

Vielen Dank im Voraus.

Gruss
Triggerfish
 

Anhänge

  • visualstudio.jpg
    visualstudio.jpg
    342,5 KB · Aufrufe: 4

Triggerfish

Stammgast
Ich habe einen Weg gefunden, das Problem zu lösen.
Jedoch bin ich immer noch der Meinung, dass es einen einfacheren Weg geben müsste.
Vielleicht hilft es ja auch einfach, die Problembeschreibung besser zu verstehen.

Mit einem Rechtsklick auf die Methode im Codeteil (Also Form.cs, nicht Form.Designer.cs) kann man über Umgestalten (jetzt mal ernsthaft, Umgestalten?), dann Umbenennen, den Namen der Methode ändern.
VS zeigt dann noch so schön an, wo er die Methode auch noch umbenennen will.

Damit hat sich auch gezeigt, dass im Form.Designer der eigentliche Name der Methode hinterlegt ist, der nach der erstmaligen Erzeugung auch nach Umbenennen der Elemente im Gui-Designer, nicht mitangepasst wird.
(Gibt es da eine Möglichkeit dazu?)

Code:
            // cmdTest
            // 
            this.cmdTest.Location = new System.Drawing.Point(64, 179);
            this.cmdTest.Name = "cmdTest";
            this.cmdTest.Size = new System.Drawing.Size(75, 23);
            this.cmdTest.TabIndex = 0;
            this.cmdTest.Text = "Test";
            this.cmdTest.UseVisualStyleBackColor = true;
            this.cmdTest.Click += new System.EventHandler(this.cmdTest_Click);

In der letzten Zeile findet sich dann der "Bösewicht", der in meinem Fall nicht mehr automatisch geändert werden konnte.

Im Anhang befinden sich noch Bilder der Menüs dazu.

Um "einfachere" Lösungen wäre ich trotzdem dankbar.

Gruss
Triggerfish
 

Anhänge

  • vs1.jpg
    vs1.jpg
    140,3 KB · Aufrufe: 4
  • vs2.jpg
    vs2.jpg
    106,4 KB · Aufrufe: 2

Telaran

Stammgast
Um "einfachere" Lösungen wäre ich trotzdem dankbar.
Die "einfachste" Lösung ist -> Entweder zuerst den Code erzeugen, oder zuerst das UI (mit den richtigen Namen, etc pp).

Weiter ist es so, dass ich dir dringend rate, dein VS2013 auf Englisch umzustellen. Damit machst du dir dein Entwickler-Leben sehr viel einfacher (weil einfach der grossteil der sinnvolleren Plattformen nur auf Englisch gibt und Übersetzungen immer schwer sind)

Zum Thema "Umgestalten" (Engl. Refactor): Das ist der gängige Weg.

Wieso?
Weil normalerweise davon ausgegangen wird, dass man entweder Code oder Ui zuerst macht. Das Refactor ist eher für grössere Anpassungen/Umgestaltungen gedacht (also normalerweise sehr viel Später in der Entwicklung). Früher gab es so was sogar nur als kostspielige Zusatzsoftware. Ich finde es sogar praktisch, wenn er die Codeänderung blockt (früher konnte man das im Code Ändern und dann ging nichts mehr und viele haben gejammert oder sich an den Kopf gefasst).

Also der einfache Weg:
Deinen Arbeitsprozess strukturieren.

Weiss, dass es kaum die Antwort ist, welche du gesucht hast, aber so sehe ich das in der Entwicklung.
 

Triggerfish

Stammgast
Hallo PC-John, hallo Telaran

Vielen Dank für eure Antworten.

Die MS-Support-Seiten werden immer unübersichtlicher, ausserdem wusste ich nicht wirklich, wie ich die Problematik in Englisch beschreiben soll. (Was ich ja auch in Deutsch nicht wirklich konnte...)
Deshalb hatte ich mich erst hier umgesehen.

Ich hatte mir schon gedacht, dass es keine "Lösung" gibt, die mein Vorhaben verwirklichen könnte, weshalb ich ja auch danach gefragt hatte, ob denn die Idee der Umbenennung so abwegig sei.
Anscheinend ja, weshalb ich das Thema als abgeschlossen betrachte.

Danke nochmals für die schnellen Antworten.

Gruss zur Nacht
Triggerfish
 

PC-John

Stammgast
Hallo PC-John, hallo Telaran
Die MS-Support-Seiten werden immer unübersichtlicher, ausserdem wusste ich nicht wirklich, wie ich die Problematik in Englisch beschreiben soll. (Was ich ja auch in Deutsch nicht wirklich konnte...)
Gruss zur Nacht
Triggerfish

Dann versuche es vielleicht mal mit Delphi, der Vorläufer war das ehemalige Turbo-Pascal.

Dazu gibt es auch deutsche Foren:
http://forum.delphi-treff.de/
http://www.delphipraxis.net/
http://www.entwickler-ecke.de/?view=df

Das Original-Forum des Delphi-Lieferanten Embarcadero ist dann:
http://docwiki.embarcadero.com/RADStudio/XE6/de/Main_Page

Die Delphi-Entwicklergemeinde ist zwar nur klein, aber fein.

PC-John
 

zplan

Stammgast
Ich hatte mir schon gedacht, dass es keine "Lösung" gibt, die mein Vorhaben verwirklichen könnte, weshalb ich ja auch danach gefragt hatte, ob denn die Idee der Umbenennung so abwegig sei.
Anscheinend ja, weshalb ich das Thema als abgeschlossen betrachte.

Hallo

Standardmässig nimmt VS den Namen des Controls + Event, als "MyButton_Click".
Die Buttonclick Methode ist ja nur ein logischer Name (Pointer), welcher im Designer File dem Button Click Event zugeordnet wird. Du kannst einfach in das Designer File gehen (in der Code Ansicht) und dort die zugewiesene Event Methode umbenennen. Natürlich dann auch die eigentliche Methode so benennen.
G, zp
 
Oben