2017-12-07 4 views
1

In der Hoffnung, dass Sie helfen können - Ich habe programmgesteuert die Schaltfläche & richtextbox erstellt. SoC# Programmatisch erstellte Schaltfläche - programmgesteuert erstelltes Textfeld aktivieren

// Button to Edit 
Button butEditToDo = new Button(); 
butEditToDo.Location = new Point(285, 10); 
butEditToDo.Size = new System.Drawing.Size(25, 25); 
butEditToDo.BackColor = Color.Transparent; 
butEditToDo.FlatStyle = FlatStyle.Flat; 
butEditToDo.FlatAppearance.BorderSize = 0; 
butEditToDo.FlatAppearance.MouseOverBackColor = Color.FromArgb(244, 244, 244); 
butEditToDo.Cursor = Cursors.Hand; 
butEditToDo.BackgroundImage = ((System.Drawing.Image)(Properties.Resources.Edit_25)); 
pnlPendingNote.Controls.Add(butEditToDo); 

// Pending Nane + Tag 
RichTextBox rxtNotes = new RichTextBox(); 
rxtNotes.Size = new System.Drawing.Size(317, 68); 
rxtNotes.Location = new Point(3, 37); 
rxtNotes.Text = (read["notNote"].ToString()); 
rxtNotes.ReadOnly = true; 
rxtNotes.BorderStyle = BorderStyle.None; 
rxtNotes.DetectUrls = true; 
rxtNotes.BackColor = Color.FromArgb(244, 244, 244); 
pnlPendingNote.Controls.Add(rxtNotes); 

, wann immer ich auf ButEditToDo_Click klicken - ich kann erhalten die rechte Taste angeklickt.

Wenn ich also auf diese Schaltfläche klicke, möchte ich die RichTextbox aktivieren - und wenn ich wieder auf die Schaltfläche klicke - möchte ich die Datenbank aktualisieren.

Button-Click:

private void ButEditToDo_Click(object sender, EventArgs e) 
{ 
    Button btn = (Button)sender; 

    for (int i = 1; i < pendingcounter; i++) 
    { 
     if (btn.Name == ("PenNote" + i)) 
     { 
      break; 
     } 
    } 
} 

Hoffnung, die Sie mit der Aktivierung der Taste bitte helfen kann, bin ich ganz gut mit der Datenbank.

Vielen Dank.

bearbeiten Ein

@Ed - danke. Bitte Siehe Bild. enter image description here

Was ich erreichen möchte - Wenn ich auf das Werkzeugsymbol klicke - wird die RichTextBox aktiviert. Wenn ich also auf die Tools im ersten Panel klicke - dann wird die R_TextBox aktiviert, damit ich den Text bearbeiten kann. Dann ändert sich das Icon und ich kann es erneut anklicken um es in der Datenbank zu speichern.

Hoffnung, die für Sie mehr Sinn macht Ed.

+0

Meine Antwort zeigte Ihnen, wie Sie tun können, was Sie brauchen. Wenn es mehr Kontrollen gibt, die Sie anfangs nicht erwähnt haben, kann es verallgemeinert werden. Die gleichen Prinzipien gelten. Ich hatte nicht die Absicht, eine vollständig getestete und getestete Implementierung bereitzustellen, und ich hätte auch kein Interesse daran, selbst wenn Ihre Erklärung für mich einen Sinn ergeben würde. Unglücklicherweise scheint dir jemand den Code für dich schreiben zu wollen. Codierung, die mich nicht interessiert, kostet US $ 200/Stunde (spezielle überhöhte Urlaubsrate); lass es mich wissen, wenn du dir das leisten kannst. Mindestens drei Stunden. –

+0

Ich wollte nicht, dass Sie meinen Code schreiben - ich habe die Lösung mit Ihrer Hilfe erfolgreich implementiert. - Ich habe nur wenig Informationen hinzugefügt - wie in Ihrem letzten Satz - für den Fall, dass Sie an etwas anderes gedacht haben. Ich lerne C#, alles, was ich brauche, ist Hilfe beim Verständnis - ich bin wohler mit HTML, CSS. – Azmodan

Antwort

1

Geben Sie einfach die Schaltfläche einen Event-Handler, der Sachen macht. Verwenden Sie ein Lambda, damit Sie auf den lokalen Verweis auf die RichTextBox verweisen können.

Button butEditToDo = new Button(); 
    // ...snip... 
    RichTextBox rxtNotes = new RichTextBox(); 
    // ...snip... 

    butEditToDo.Click += (sender, args) => 
    { 
     CycleNoteState(rxtNotes); 
    }; 

Und hier ist der Mut des Event-Handlers. Sie könnten dies alles in den Event-Handler schreiben, aber der Code ist auf diese Weise besser lesbar. CycleNoteState ist kein sehr guter Name, aber ich bin mir nicht sicher über die Semantik Ihres Programms.

Ich habe möglicherweise die Logik für das, was der Knopf bei aufeinanderfolgenden Klicks tut, falsch verstanden. Wenn es komplizierter ist als das, können Sie eine Zustandsaufzählung oder etwas einführen. Lass es mich wissen und wir werden es herausfinden.

private void CycleNoteState(RichTextBox rtb) 
{ 
    if (!rtb.Enabled) 
    { 
     rtb.Enabled = true; 
    } 
    else 
    { 
     // Do save stuff here 
    } 
} 
Verwandte Themen