[C#] Row verwijderen

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • ThaAresX
  • Registratie: September 2010
  • Laatst online: 09-10 08:52
Beste tweakeraars,

Ik heb een TablePanel. Nou wil ik een extra rij invoegen met een aantal controls erbij wanneer een checkbox checked is. Dit gebeurd. Alleen de toegevoegde rij moet weer verwijderd worden wanneer de checkbox unchecked wordt. Dit gebeurt wel. Echter de table wordt steeds groter ipv weer terug naar de originele grootte. Dus dan heb ik een lege rij tussen de andere rijen.

Ik heb van alles geprobeerd. Maar krijg het niet werkend.

C#:
34
35
36
37
38
39
40
41
42
43
44
45
private void MultipleDefects(object sender, EventArgs e) {
            int newRows = 0;
            CheckBox checkbox = (CheckBox)sender;
            if (checkbox.CheckState == CheckState.Checked) {
                newRows++;
                int row = QcTable_Panel.GetRow(checkbox);
                NewRowForDefect(row);
            } else if (checkbox.CheckState == CheckState.Unchecked) {
                int row = QcTable_Panel.GetRow(checkbox);
                RemoveRow(row);
            }
        }


C#:
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
 private void NewRowForDefect(int rowPos) {
                QcTable_Panel.Height = QcTable_Panel.Height + 45;
                QcTable_Panel.RowCount = QcTable_Panel.RowCount + 1;

                QcTable_Panel.RowStyles.Add(new RowStyle(SizeType.Absolute, 45F));

                ComboBox DefectCombo = new ComboBox();
                /*foreach (Defect d in qcc.GetPossibleDefects()) {
                        DefectCombo.Items.Add(d.Name);
                    }*/
                DefectCombo.Items.Add("test");
                DefectCombo.Items.Add("test2");
                DefectCombo.Font = new System.Drawing.Font("Microsoft Sans Serif", 20F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                DefectCombo.Size = new System.Drawing.Size(200, 22);

                //TextBox Quantity
                TextBox Quantity = new TextBox();
                Quantity.Font = new System.Drawing.Font("Microsoft Sans Serif", 20F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                Quantity.Size = new System.Drawing.Size(200, 22);

                //Combobox Level of Defect
                ComboBox LoD = new ComboBox();
                LoD.Items.Add(2);
                LoD.Items.Add(3);
                LoD.Items.Add(4);
                LoD.Font = new System.Drawing.Font("Microsoft Sans Serif", 20F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                LoD.Size = new System.Drawing.Size(200, 22);

                int rowIndex = rowPos + 1;
                QcTable_Panel.RowStyles.RemoveAt(rowIndex);

                for (int columnIndex = 0; columnIndex < QcTable_Panel.ColumnCount; columnIndex++) {
                    var control = QcTable_Panel.GetControlFromPosition(columnIndex, rowIndex);
                    QcTable_Panel.Controls.Remove(control);
                }

                for (int i = rowIndex; i < QcTable_Panel.RowCount; i++) {
                    for (int columnIndex = 0; columnIndex < QcTable_Panel.ColumnCount; columnIndex++) {
                        var control = QcTable_Panel.GetControlFromPosition(columnIndex, i);
                        if (control != null) {
                            QcTable_Panel.SetRow(control, i);
                        }
                    }
                }

                QcTable_Panel.Controls.Add(DefectCombo, 1, rowPos + 1);
                QcTable_Panel.Controls.Add(Quantity, 2, rowPos + 1);
                QcTable_Panel.Controls.Add(LoD, 3, rowPos + 1);
        }


C#:
112
113
114
115
116
117
118
119
120
121
122
123
124
125
 private void RemoveRow(int rowPos) {
            QcTable_Panel.RowStyles.RemoveAt(rowPos + 1);
            int index = rowPos + 1;
           

            for (int columnIndex = 1; columnIndex < 4; columnIndex++) {
                var control = QcTable_Panel.GetControlFromPosition(columnIndex,index);
                if (control != null) {
                    QcTable_Panel.Controls.Remove(control);
                }
            }

            QcTable_Panel.RowCount = QcTable_Panel.RowCount - 1;
        }


Kan iemand mij vertellen wat er mis is met mijn code en eventueel mij verbeteren? Ik ben een beginner met betrekking tot C# UI en TablePanels

Acties:
  • 0 Henk 'm!

  • BM
  • Registratie: September 2001
  • Laatst online: 17:39

BM

Moderator Spielerij
Toevoegen:
C#:
1
2
QcTable_Panel.Height = QcTable_Panel.Height + 45;
QcTable_Panel.RowCount = QcTable_Panel.RowCount + 1;


Verwijderen:
C#:
1
QcTable_Panel.RowCount = QcTable_Panel.RowCount - 1;


Ik heb wel een vermoeden wat er niet goed gaat. Jij vermoedelijk ook wel als je deze regels bekijkt :)

Xbox
Even the dark has a silver lining | I'm all you can imagine times infinity, times three


Acties:
  • 0 Henk 'm!

  • ThaAresX
  • Registratie: September 2010
  • Laatst online: 09-10 08:52
BM schreef op dinsdag 29 september 2015 @ 13:14:
Toevoegen:
C#:
1
2
QcTable_Panel.Height = QcTable_Panel.Height + 45;
QcTable_Panel.RowCount = QcTable_Panel.RowCount + 1;


Verwijderen:
C#:
1
QcTable_Panel.RowCount = QcTable_Panel.RowCount - 1;


Ik heb wel een vermoeden wat er niet goed gaat. Jij vermoedelijk ook wel als je deze regels bekijkt :)
De rij moet tussen twee rijen ingevoegd worden. Inderdaad met jouw code voeg ik wel een toe. Maar deze moet dus tussen bepaalde rijen komen, en wanneer de checkbox unchecked wordt, moet deze weer verwijderd worden. Had ik moeten zeggen, MB

Acties:
  • 0 Henk 'm!

  • BM
  • Registratie: September 2001
  • Laatst online: 17:39

BM

Moderator Spielerij
Ik doelde meer op het feit dat je bij elke rij die je toevoegd wel netjes je panel groter maakt, maar niet kleiner als je een rij weghaalt.

Xbox
Even the dark has a silver lining | I'm all you can imagine times infinity, times three


Acties:
  • 0 Henk 'm!

  • ThaAresX
  • Registratie: September 2010
  • Laatst online: 09-10 08:52
Dit heb ik nu aangepast, maar hij doet het nog niet goed. Hij verspringt nu wél naar boven. Maar na een paar keer klikken op dezelfde checkbox blijven de rest van de rijen naar beneden springen maar met steeds meer lege rijen er tussen.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Misschien moet je er even niet vanuit gaan dat alles "automagisch" goed gaat. Je zult dus zélf expliciet moeten aangeven op welke plek (X/Y) zo'n ding ingevoegd moet worden, hoe hoog de parent container moet zijn etc. Je zou eens kunnen beginnen met gewoon basic debuggen en kijken wat er nou precies gebeurt als je (stap-voor-stap) door je code stepped met je debugger (zie Debuggen: Hoe doe ik dat?).

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1