Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

[VB] Mouse Cursor Disappears while inside the form

Îåêßíçóå áðü ôï ìÝëïò AlKiS. Τελευταία δημοσίευση από το μέλος AlKiS στις 26-04-2013, 15:41. Υπάρχουν 7 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  15-03-2013, 02:35 72333

    [VB] Mouse Cursor Disappears while inside the form

    Καλησπέρα,

    Κάτι πολύ περίεργο γίνεται, και δεν μπορώ να καταλάβω γιατί.

    Το πρόβλημα είναι: Ο cursor του ποντικιού εξαφανίζεται, και δεν μπορώ να καταλάβω γιατί..

     Μπορείτε να δείτε ακριβώς τι γίνεται, στο ακριβώς 2 λεπτά video αυτό

    Το πρόβλημα σταματά να προκαλείτε όταν κάνω comment out τη γραμμή αυτή "lstXtimesY(lstXtimesY.Count - 2).Focus()" που βρίσκεται στο "AddAnotherRow()" το οποίο καλείτε από το "TextChanged" των textboxes που πατάω. (παραθέτω παρακάτω τον κώδικα)


    Η προφανής λύση είναι "αφού βρήκες τι το προκαλεί, διέγραψέ το". Αλλά δεν θέλω να το κάνω για 2 λόγους.

    1) Αυτό είναι το σύμπτωμα, και δεν θέλω να κάνω treat τα συμπτώματα, αλλά το πρόβλημα

    2) Αν το διαγράψω αυτό, τότε όταν προσθέτεται νέο row, δεν θα παίρνει focus το τελευταίο sub πριν προστεθεί το νέο row, άρα δεν θα μπορεί ο χρήστης να πατήσει ένα απλό tab για να βάλει τα επόμενα νούμερα. Αυτός είναι ο σκοπός της σειράς αυτής. Ο χρήστης βάζει νούμερα στα textboxes "1" και "2" για "Χ" και "Υ", το πρόγραμμα υπολογίζει τα 2 επόμενα textboxes Χ^2 και Χ*Υ, και άρα για να γράψει το επόμενο νούμερο ο χρήστης με το tab (κρατώντας μια λογική σειρά tab-order) είναι να παίρνει focus το συγκεκριμένο textbox


    Άρα... για ποιο λόγο γίνεται αυτό το περίεργο πράγμα, και χάνετε το ποντίκι, και μόλις πατήσεις κλικ συμπεριφέρεται λες και πάτησες πάνω στο τελευταίο textbox στο οποίο είχες πατήσει νωρίτερα?


    Παραθέτω τον κώδικα:

    1) Private Sub AddAnotherRow Προσθέτει μια ακόμα σειρά από textboxes για να μπορεί να βάλει κι άλλες τιμές Χ,Υ,Χ^2,Χ*Υ ο χρήστης. Η τελευταία γραμμή αυτού εμφανίζει και το πρόβλημα.

    2) Private Sub lstX_Enter_Click Ενεργοποιείται όταν κάποιος εισέλθει ή κάνει click σε οποιοδήποτε textbox είναι για τις τιμές του Χ, και καλεί το "TypeBox" το οποίο εμφανίζει μια φόρμα όπου στην προκειμένη περίπτωση δέχεται μόνο τιμές Decimal ή κενό, και κατόπιν μεταφέρει την τιμή στο textbox που το κάλεσε.

    3) Private Sub lstY_Enter_Click Κάνει το ίδιο ακριβώς με το από πάνω, απλώς για τιμές του Υ

    4) Private Sub lstX_TextChanged Καλείτε όταν ολοκληρωθεί το "2)" και αλλάξει το κείμενο του textbox. Ενημερώνει κάποια κείμενα, και ελέγχει εάν πρέπει να προσθέσει ή να αφαιρέσει row

    5) Private Sub lstY_TextChanged Το ίδιο με το απο πάνω, απλώς ενημερώνει άλλα κείμενα.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    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
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
     
        Private Sub AddAnotherRow() 'Sub Num: 01
            Dim HeightAddition As Integer = 6 + rtfX_1.Height
    
    
            'Making the GroupBox bigger so that it can accomodate the new control
            Dim NewgbExperimentalValuesAndPreparationHeight As Integer = gbExperimentalValuesAndPreparation.Height + HeightAddition
            gbExperimentalValuesAndPreparation.Size = New Drawing.Size(gbExperimentalValuesAndPreparation.Width, NewgbExperimentalValuesAndPreparationHeight)
    
    
            'Creating the new controls, and amending them to our needs
            Dim NewRtf_LocationY As Integer = lstX.Item(lstX.Count - 1).Location.Y + HeightAddition
    
            '   -New X RichTextBox
            Dim NewRtfX As New RichTextBox With {.Name = "rtfX_" & lstX.Count, .ReadOnly = True, .BackColor = Color.White, .DetectUrls = False, .Multiline = False,
                                                 .ScrollBars = RichTextBoxScrollBars.None, .WordWrap = False, .ForeColor = Color.FromArgb(-16727872),
                                                 .Location = New Drawing.Point(rtfX_1.Location.X, NewRtf_LocationY), .Size = lstX.Item(lstX.Count - 1).Size}
            gbExperimentalValuesAndPreparation.Controls.Add(NewRtfX)
            AddHandler NewRtfX.TextChanged, AddressOf lstX_TextChanged
            AddHandler NewRtfX.Enter, AddressOf lstX_Enter_Click
            AddHandler NewRtfX.Click, AddressOf lstX_Enter_Click
            NewRtfX.TabIndex = lstXtimesY.Item(lstXtimesY.Count - 1).TabIndex + 1
    
            '   -New Y RichTextBox
            Dim NewRtfY As New RichTextBox With {.Name = "rtfY_" & lstY.Count, .ReadOnly = True, .BackColor = Color.White, .DetectUrls = False, .Multiline = False,
                                                 .ScrollBars = RichTextBoxScrollBars.None, .WordWrap = False, .ForeColor = Color.FromArgb(-16727872),
                                                 .Location = New Drawing.Point(rtfY_1.Location.X, NewRtf_LocationY), .Size = lstY.Item(lstY.Count - 1).Size}
            gbExperimentalValuesAndPreparation.Controls.Add(NewRtfY)
            AddHandler NewRtfY.TextChanged, AddressOf lstY_TextChanged
            AddHandler NewRtfY.Enter, AddressOf lstY_Enter_Click
            AddHandler NewRtfY.Click, AddressOf lstY_Enter_Click
            NewRtfY.TabIndex = NewRtfX.TabIndex + 1
    
            '   -New Xexp2 RichTextBox
            Dim NewRtfXexp2 As New RichTextBox With {.Name = "rtfXexp2_" & lstXexp2.Count, .ReadOnly = True, .BackColor = Color.White, .DetectUrls = False, .Multiline = False,
                                                 .ScrollBars = RichTextBoxScrollBars.None, .WordWrap = False, .ForeColor = Color.Black,
                                                 .Location = New Drawing.Point(rtfXexp2_1.Location.X, NewRtf_LocationY), .Size = lstXexp2.Item(lstXexp2.Count - 1).Size}
            gbExperimentalValuesAndPreparation.Controls.Add(NewRtfXexp2)
            AddHandler NewRtfXexp2.TextChanged, AddressOf lstXexp2_TextChanged
            NewRtfXexp2.TabIndex = NewRtfY.TabIndex + 1
    
            '   -New XtimesY RichTextBox
            Dim NewRtfXtimesY As New RichTextBox With {.Name = "rtfXtimesY_" & lstXtimesY.Count, .ReadOnly = True, .BackColor = Color.White, .DetectUrls = False, .Multiline = False,
                                                 .ScrollBars = RichTextBoxScrollBars.None, .WordWrap = False, .ForeColor = Color.Black,
                                                 .Location = New Drawing.Point(rtfXtimesY_1.Location.X, NewRtf_LocationY), .Size = lstXtimesY.Item(lstXtimesY.Count - 1).Size}
            gbExperimentalValuesAndPreparation.Controls.Add(NewRtfXtimesY)
            AddHandler NewRtfXtimesY.TextChanged, AddressOf lstXtimesY_TextChanged
            NewRtfXtimesY.TabIndex = NewRtfY.TabIndex + 1
    
            '   -New Serial Number Label
            Dim NewlblSerialNum As New Label With {.Name = "lblSerialNum_" & lstSN.Count, .Text = (lstSN.Count) & ")",
                                                 .Location = New Drawing.Point(lblSerialNum_1.Location.X, NewRtf_LocationY)}
            gbExperimentalValuesAndPreparation.Controls.Add(NewlblSerialNum)
    
    
            'Moving the groupboxes below, further below so that they are completely visible once again
            gbCalculationOf_A_B_andOptimumLine.Location = New Drawing.Point(gbCalculationOf_A_B_andOptimumLine.Location.X, gbCalculationOf_A_B_andOptimumLine.Location.Y + HeightAddition)
    
    
            'Making the form bigger so that everything is visible inside it 
            Dim DesirableNewFormHeight As Integer = Me.Size.Height + HeightAddition
            If DesirableNewFormHeight > My.Computer.Screen.Bounds.Height Then
                Me.pnlMain.Size = New Size(pnlMain.Size.Width, pnlMain.Size.Height + HeightAddition)
            Else
                Me.Size = New Size(Me.Size.Width, Me.Size.Height + HeightAddition)
            End If
    
    
            'Making sure the whole form is visible
            If Me.Location.Y + Me.Size.Height > My.Computer.Screen.Bounds.Height Then Me.Location = New Drawing.Point(Me.Location.X, My.Computer.Screen.Bounds.Height - Me.Size.Height)
    
            'Updating Texts
            lblSerialNum_N.Text = "N=" & lstX.Count - 1
    
            'Adding the new controls to the lists
            lstX.Add(NewRtfX)
            lstY.Add(NewRtfY)
            lstXexp2.Add(NewRtfXexp2)
            lstXtimesY.Add(NewRtfXtimesY)
            lstSN.Add(NewlblSerialNum)
    
            Dim DesirableXCoordinate As Integer = pnlMain.Location.X + gbExperimentalValuesAndPreparation.Location.X + lstX(lstX.Count - 1).Location.X + CInt(lstX(lstX.Count - 1).Size.Width / 2)
            Dim DesirablesYCoordinate As Integer = pnlMain.Location.Y + gbExperimentalValuesAndPreparation.Location.Y + lstX(lstX.Count - 1).Location.Y + CInt(lstX(lstX.Count - 1).Height / 4) + 38 '38 is probably the added size of thewindows frame
            Windows.Forms.Cursor.Position = New Point(DesirableXCoordinate, DesirablesYCoordinate)
            lstXtimesY(lstXtimesY.Count - 2).Focus() 'Makes the mouse behave odd
        End Sub
    
    
        Private Sub lstX_Enter_Click(sender As Object, e As EventArgs) Handles rtfX_1.Enter, rtfX_1.Click 'Sub Num: 03
            Dim Index As Integer = CInt(GetSubstrAfterString((DirectCast(sender, RichTextBox).Name), "_", "-1", , True))
            Dim Num As Decimal
    
            If Index <> -1 Then
                If TypeBox("Give a number for X:", Num, True, , MinDecimal, MaxDecimal) Then
                    If Num <> Decimal.MinValue Then
                        lstX(Index).Text = Num.ToString
    
                        Dim DesirableXCoordinate As Integer = pnlMain.Location.X + gbExperimentalValuesAndPreparation.Location.X + lstY(lstY.Count - 1).Location.X + CInt(lstY(lstY.Count - 1).Size.Width / 2)
                        Dim DesirablesYCoordinate As Integer = pnlMain.Location.Y + gbExperimentalValuesAndPreparation.Location.Y + lstY(lstY.Count - 1).Location.Y + CInt(lstY(lstY.Count - 1).Height / 4) + 38 '38 is probably the added size of thewindows frame
                        Windows.Forms.Cursor.Position = New Point(DesirableXCoordinate, DesirablesYCoordinate)
                    Else
                        lstX(Index).Text = ""
                    End If
                End If
    
            Else
                MsgBox("An error has occurred!" & vbCrLf & "It is recommended that you close this form and try again", MsgBoxStyle.Exclamation, "Error: 0x0E20030101")
            End If
        End Sub
    
        Private Sub lstY_Enter_Click(sender As Object, e As EventArgs) Handles rtfY_1.Enter, rtfY_1.Click 'Sub Num: 04
            Dim Index As Integer = CInt(GetSubstrAfterString((DirectCast(sender, RichTextBox).Name), "_", "-1", , True))
            Dim Num As Decimal
    
            If Index <> -1 Then
                If TypeBox("Give a number for Y:", Num, True, , MinDecimal, MaxDecimal) Then
                    If Num <> Decimal.MinValue Then lstY(Index).Text = Num.ToString Else lstY(Index).Text = ""
                End If
    
            Else
                MsgBox("An error has occurred!" & vbCrLf & "It is recommended that you close this form and try again", MsgBoxStyle.Exclamation, "Error: 0x0E20040101")
            End If
        End Sub
    
        Private Sub lstX_TextChanged(sender As Object, e As EventArgs) Handles rtfX_1.TextChanged 'Sub Num: 06
            Dim Index As Integer = CInt(GetSubstrAfterString((DirectCast(sender, RichTextBox).Name), "_", "-1", , True))
    
            If Index <> -1 Then
                lstX.Item(Index).SelectAll()
                lstX.Item(Index).SelectionAlignment = HorizontalAlignment.Center
                lstX.Item(Index).DeselectAll()
                lstX.Item(Index).SelectionStart = lstX.Item(Index).Text.Length
    
                If lstX.Item(Index).Text <> "" AndAlso lstY.Item(Index).Text <> "" Then 'This checkes Item(INDEX), the next one checkes Item(lstX.Count - 1)
                    lstXexp2.Item(Index).Text = CStr(CDec(lstX.Item(Index).Text) ^ 2) 'Calculating the right values, if a value is set for X and Y
                    lstXtimesY.Item(Index).Text = CStr(CDec(lstX.Item(Index).Text) * CDec(lstY.Item(Index).Text))
    
                ElseIf lstX.Item(Index).Text <> "" Then 'Calculating the right value, if a value is set X
                    lstXexp2.Item(Index).Text = CStr(CDec(lstX.Item(Index).Text) ^ 2)
    
                Else 'or deleting the calculated values if X is unset
                    lstXexp2.Item(Index).Text = ""
                    lstXtimesY.Item(Index).Text = ""
                End If
    
                'Updating the SumOf(X) textbox
                Dim Sum As Decimal = 0D
                For Each lst In lstX
                    If IsNumeric(lst.Text) Then Sum += CDec(lst.Text)
                Next
                lblSx.Text = Sum.ToString
    
            Else
                MsgBox("An error has occurred!" & vbCrLf & "It is recommended that you close this form and try again", MsgBoxStyle.Exclamation, "Error: 0x0E20050101")
            End If
    
            If lstX.Item(lstX.Count - 1).Text <> "" AndAlso lstY.Item(lstY.Count - 1).Text <> "" Then 'If the last two textboxes are filled, then add another row
                Call AddAnotherRow()
            ElseIf lstX.Item(lstX.Count - 1).Text = "" AndAlso lstY.Item(lstY.Count - 1).Text = "" AndAlso lstX.Item(lstX.Count - 2).Text = "" AndAlso lstY.Item(lstY.Count - 2).Text = "" AndAlso lstX.Count > 2 Then 'If the last two textboxes are empty and are not the first two, then delete them
                Call RemoveLastRow()
            End If
    
        End Sub
    
        Private Sub lstY_TextChanged(sender As Object, e As EventArgs) Handles rtfY_1.TextChanged 'Sub Num: 05
            Dim Index As Integer = CInt(GetSubstrAfterString((DirectCast(sender, RichTextBox).Name), "_", "-1", , True))
    
            If Index <> -1 Then
                lstY.Item(Index).SelectAll()
                lstY.Item(Index).SelectionAlignment = HorizontalAlignment.Center
                lstY.Item(Index).DeselectAll()
                lstY.Item(Index).SelectionStart = lstX.Item(Index).Text.Length
    
                If lstX.Item(Index).Text <> "" AndAlso lstY.Item(Index).Text <> "" Then 'This checkes Item(INDEX), the next one checkes Item(lstX.Count - 1)
                    lstXexp2.Item(Index).Text = CStr(CDec(lstX.Item(Index).Text) ^ 2) 'Calculating the right values, if a value is set for X and Y
                    lstXtimesY.Item(Index).Text = CStr(CDec(lstX.Item(Index).Text) * CDec(lstY.Item(Index).Text))
    
                ElseIf lstY.Item(Index).Text = "" Then
                    lstXtimesY.Item(Index).Text = ""
                End If
    
                'Updating the SumOf(Y) textbox
                Dim Sum As Decimal = 0D
                For Each lst In lstY
                    If IsNumeric(lst.Text) Then Sum += CDec(lst.Text)
                Next
                lblSy.Text = Sum.ToString
    
            Else
                MsgBox("An error has occurred!" & vbCrLf & "It is recommended that you close this form and try again", MsgBoxStyle.Exclamation, "Error: 0x0E20060101")
            End If
    
            If lstX.Item(lstX.Count - 1).Text <> "" AndAlso lstY.Item(lstY.Count - 1).Text <> "" Then 'If the last two textboxes are filled, then add another row
                Call AddAnotherRow()
            ElseIf lstX.Item(lstX.Count - 1).Text = "" AndAlso lstY.Item(lstY.Count - 1).Text = "" AndAlso lstX.Item(lstX.Count - 2).Text = "" AndAlso lstY.Item(lstY.Count - 2).Text = "" AndAlso lstX.Count > 2 Then 'If the last two textboxes are empty and are not the first two, then delete them
                Call RemoveLastRow()
            End If
    
        End Sub


  •  18-03-2013, 15:12 72341 σε απάντηση της 72333

    Απ: [VB] Mouse Cursor Disappears while inside the form

    Τελικά βρήκα λύση μόνος μου.. Φαντάστηκα ότι είχε κάτι να κάνει με το "Focus" που είχε το control προτού του το πάρω βίαια και το αναθέσω σε άλλο control, οπότε έκανα το εξής:

    άλλαξα τον ορισμό του sub που δημιουργεί το πρόβλημα από:

    1
     
    Private Sub AddAnotherRow()
    σε

    1
     
    Private Sub AddAnotherRow(sender As Object)

    και στη σειρά που δημιουργεί το πρόβλημα (την μεσαία στον παρακάτω κώδικα) έβαλα πάνω και κάτω της, αλλαγή Enabled, ώστε να μην μπορεί να έχει πια focus:

    1
    2
    3
    4
     
            DirectCast(sender, RichTextBox).Enabled = False
            lstXtimesY(lstXtimesY.Count - 2).Focus()
            DirectCast(sender, RichTextBox).Enabled = True
     
    Αυτό πέτυχε και δεν προκαλείται πια το πρόβλημα.


    Έγραψα την εξήγηση έτσι ώστε εάν υπάρχει κάποιος άλλος με το ίδιο πρόβλημα, να μπορεί να δει πως το ξεπέρασα.

    /tbody
  •  20-03-2013, 16:30 72355 σε απάντηση της 72341

    Απ: [VB] Mouse Cursor Disappears while inside the form

    Δεν χρησιμοποιύμε το Focus method  αλλά το Select. Επίσης από ότι είδα στο Video δεν θα πρέπει να εμφανίζεις άλλη φόρμα γιά την καταχώρηση τιμών αλλά την ίδια κατά την γνώμη μου.
  •  20-03-2013, 17:10 72356 σε απάντηση της 72355

    Απ: [VB] Mouse Cursor Disappears while inside the form

    Το δοκίμασα με το Select() αλλά συμβαίνει το ίδιο πράγμα. Ο μόνος τρόπος που πετυχαίνει είναι με το να βάλω το Enabled=X πάνω και κάτω από αυτό.

    Άλλαξα όμως το "Focus" σε "Select", per your suggestion.

    Καταλαβαίνω ότι αυτό που συμβαίνει είναι ότι φαίνεται να είναι σε KeyDown, γιαυτό είναι κρυμμένο και όταν κάνω κλικ οπουδήποτε αλλού, γίνεται raise το "Button.Clicked" και εμφανίζεται ο διάλογος. Το γιατί είναι σε κατάσταση KeyDown ενώ δεν έχω κάνει Click, δεν το καταλαβαίνω διότι δεν έχει ξανασυμβεί ποτέ σε κανένα μου πρόγραμμα. Αλλά αφού διορθώνεται τόσο απλά, δεν με πειράζει.


    Όσον αφορά στην φόρμα για εισαγωγή τιμών, καταλαβαίνω τι εννοείς, και έχεις μεν δίκιο στο ότι η εισαγωγή θα έπρεπε να γίνεται στο textbox της ίδιας της φόρμας που θέλουμε να γίνει η εισαγωγή in the first place.

    Από την άλλη όμως, το function αυτό που καλεί τη φόρμα εισαγωγής, είναι ίσως η καλύτερη δουλειά που έχω κάνει μέχρι στιγμής και δίνει τόσες δυνατότητες παραμετροποίησης! Σύντομα μάλιστα, θα ετοιμάσω για το φόρουμ αυτό ένα demonstration programme για το function εισαγωγής δεδομένων το οποίο ονομάζω TypeBox (open source, θα περιλαμβάνω το function αυτό, καθώς και άλλη δουλειά).


    Το τι μπορεί να κάνει είναι πραγματικά εκπληκτικό (ή τουλάχιστον στο δικό μου μυαλό), και με έχει βοηθήσει απίστευτα πολύ στα τελευταία μου προγράμματα.

    Θα κάνω post το executable, καθώς και τον πλήρη πηγαίο κώδικα +άλλα, ώστε όποιος θέλει να το χρησιμοποιήσει στο δικό του πρόγραμμα, να μπορεί. Πιστεύω ότι θα βοηθήσει πολύ όσους αρχίζουν προγραμματισμό.

    Το μόνο "μειονέκτημα" if you will, είναι ίσως ότι το έχω γραμμένο σε VB.NET, και ξέρω ότι οι περισσότεροι snobάρουν την VB.

    Well... ίσως το μεταφράσω και σε C# επίσης, δεν θα είναι δύσκολο.


    I value you opinion, και έτσι, όταν το κάνω ποστ, θα ήθελα πολύ να το τρέξεις και ίσως να ρίξεις μια ματιά στον κώδικα και να μου πεις την γνώμη σου :)


  •  08-04-2013, 21:48 72441 σε απάντηση της 72356

    Απ: [VB] Mouse Cursor Disappears while inside the form

    Το δοκίμασα με το Select() αλλά συμβαίνει το ίδιο πράγμα. Ο μόνος τρόπος που πετυχαίνει είναι με το να βάλω το Enabled=X πάνω και κάτω από αυτό.

    Άλλαξα όμως το "Focus" σε "Select", per your suggestion.

    - Το Select δεν στο πρότεινα γιά να σου λύσει το πρόβλημά σου. Το focus χρησιμοποιείται συνήθως όταν κάνουμε control authoring δηλάδη όταν φτιάχνουμε δικά μας controls.
    Το Select κάνει πιό πολλά πράγματα πχ "κοιτάζει" το Hierarchy chain του container control (αν είναι enabled, disabled το parent control ), δουλεύει και από το load event και άλλα πολλά.

     

    Καταλαβαίνω ότι αυτό που συμβαίνει είναι ότι φαίνεται να είναι σε KeyDown, γιαυτό είναι κρυμμένο και όταν κάνω κλικ οπουδήποτε αλλού, γίνεται raise το "Button.Clicked" και εμφανίζεται ο διάλογος. Το γιατί είναι σε κατάσταση KeyDown ενώ δεν έχω κάνει Click, δεν το καταλαβαίνω διότι δεν έχει ξανασυμβεί ποτέ σε κανένα μου πρόγραμμα. Αλλά αφού διορθώνεται τόσο απλά, δεν με πειράζει.

    -Σκεπάστηκε, δεν διορθώθηκε, θα πρέπει να βρεις τι συμβαίνει κατά την γνώμη μου.

    Όσον αφορά στην φόρμα για εισαγωγή τιμών, καταλαβαίνω τι εννοείς, και έχεις μεν δίκιο στο ότι η εισαγωγή θα έπρεπε να γίνεται στο textbox της ίδιας της φόρμας που θέλουμε να γίνει η εισαγωγή in the first place.

    Από την άλλη όμως, το function αυτό που καλεί τη φόρμα εισαγωγής, είναι ίσως η καλύτερη δουλειά που έχω κάνει μέχρι στιγμής και δίνει τόσες δυνατότητες παραμετροποίησης! Σύντομα μάλιστα, θα ετοιμάσω για το φόρουμ αυτό ένα demonstration programme για το function εισαγωγής δεδομένων το οποίο ονομάζω TypeBox (open source, θα περιλαμβάνω το function αυτό, καθώς και άλλη δουλειά).

     -Ωραία αλλά, μήπως θα έπρεπε να φτιάξεις ένα δικό σου Control (TypeBox) αντί γιά Φόρμα;

    Το τι μπορεί να κάνει είναι πραγματικά εκπληκτικό (ή τουλάχιστον στο δικό μου μυαλό), και με έχει βοηθήσει απίστευτα πολύ στα τελευταία μου προγράμματα.

    Θα κάνω post το executable, καθώς και τον πλήρη πηγαίο κώδικα +άλλα, ώστε όποιος θέλει να το χρησιμοποιήσει στο δικό του πρόγραμμα, να μπορεί. Πιστεύω ότι θα βοηθήσει πολύ όσους αρχίζουν προγραμματισμό.

    -Γενικά είμαι εναντίον σε οτιδήποτε μορφή Open Source ιδίως σε περιπτώσεις στις οποίες αυτό χρησιμοποιείται από νέους προγραμματιστές όπως ανέφερες.
    Μπορεί να θεωρείται cool και της μόδας αλλά δεν βοηθάει ουσιαστικά αφού στο 99%+ των περιπτώσεων χρησιμοποιείται ως Blackbox και λίγοι είναι αυτοί ( στις μέρες μας )
    που μπορούν να διαβάσουν και να κατανοήσουν ξένο πηγαίο κώδικα. Αλλά κάνε ότι νομίζεις.

    Το μόνο "μειονέκτημα" if you will, είναι ίσως ότι το έχω γραμμένο σε VB.NET, και ξέρω ότι οι περισσότεροι snobάρουν την VB. 

    - VB πφφφφφφ!  Smile

    Well... ίσως το μεταφράσω και σε C# επίσης, δεν θα είναι δύσκολο.

    -Well... από εδώ και πέρα ας είναι όλες σου οι εφαρμογές σε C#, οι ελιτιστές της συμφοράς (ξεκινώντας από την ίδια την Microsoft) την φάγανε την vb .net και αν ( ω μη γένοιτο ) χρειαστεί να δουλέψεις 
    ως προγραμματιστής με την VB δεν θα βρίσκεις δουλειά τόσο εύκολα. Στο κάτω κάτω
     γιατί εσύ να μαθαίνεις 2 γλώσσες που στην ουσία κάνουν το ίδιο πράγμα;
    Μάθε C++ είναι ( ακόμα ) αξεπέραστη γλώσσα.

    I value you opinion, και έτσι, όταν το κάνω ποστ, θα ήθελα πολύ να το τρέξεις και ίσως να ρίξεις μια ματιά στον κώδικα και να μου πεις την γνώμη σου :)

    -Αν μπορώ ναι.

    Επίσης:

    Να προσπαθείς να κάνεις refactoring τον κώδικά σου έτσι ώστε να φτάνεις στο ίδιο αποτέλεσμα χρησιμοποιώντας όσο το δυνατόν λιγότερες γραμμές κώδικα. Να είσαι μινιμαλιστής.

    Να μην φτιάχνεις κλάσεις γιά πλάκα, μόνο όταν χρειάζεται να κληρονομηθούν, τα structs καλύπτουν ένα μεγάλο ποσοστό των περιπτώσεων, να δημιουργείς sealed classes ( Not Inheritable in VB) ή abstract classes ( mustInherit ) με pure virtual functions (MustOverride In VB).

    Δεν υπάρχει τίποτε πιό επαγγελματικό ( Look and feel ) από ένα UI που φτιάχνεται από controls της Microsoft τα degrade πέθαναν.

    Να προσπαθείς όλες οι φόρμες που φτιάχνεις να έχουν το ratio της χρυσής τομής (1.618 περίπου) ή πολλαπλάσια αυτού.

     

  •  23-04-2013, 13:34 72521 σε απάντηση της 72441

    Απ: [VB] Mouse Cursor Disappears while inside the form

    Wow, πολλές πληροφορίες :)

    Αρχικά να πω ότι, πράγματι, απλώς σκεπάστηκε.. όμως δεν μπόρεσα να βρω τι συμβαίνει ακόμα - και δεν βλέπω να το καταλαβαίνω σύντομα. Το έψαξα πολύ, αλλά τπτ.


    Control αντί για φόρμα. χμμ! Αφού κυριολεκτικά είναι ένα control αυτή η φόρμα, τότε ΝΑΙ! σίγουρα θα ήταν καλύτερα :)

    Θα αρχίσω την αλλαγή από form σε control αυτές τις μέρες

    Δεν κάνω τίποτα επειδή το "θεωρώ cool". Γενικά δεν είμαι άνθρωπος που σκέφτεται έτσι. Αν ήμουν τότε θα κάπνιζα, και θα ήμουν σε club κάθε βράδυ.

    Πιστεύω στο open source. Δεν θεωρώ ότι τα πάντα θα πρέπει να είναι open source. Η γνώμη μου είναι ότι, εάν φτιάξω κάτι το οποίο -μπορεί να χρησιμοποιηθεί σχεδόν σε κάθε πρόγραμμα-, τότε γιατί να μην το μοιραστώ?

    Και εδώ απάντησες ήδη για τη δικιά μου περίπτωση :Ρ επειδή είμαι νέος προγραμματιστής και θα έχω σίγουρα κάνει μλκία. Αυτό δεν το είχα σκεφτεί.. και έχεις δίκιο. Ίσως θα έπρεπε να περιμένω να μάθω πολύ καλύτερα προτού κάνω μια τέτοια κίνηση.

    Δεν σκέφτομαι να το κατεβάσω τώρα που δημοσιεύτηκε, αλλά σίγουρα δεν θα ανεβάσω τίποτα άλλο μέχρι να μπορώ να αναφέρομαι στον εαυτό μου ως "προγραμματιστής".

    Πιστεύω πάντως ότι θα μπορέσουν να κατανοήσουν τον κώδικα μου διότι έχω βάλει πάρα πολλά comments που εξηγώ ουσιαστικά τι κάνει το κάθε πράγμα.


    Έχεις δίκιο και σε αυτό. είναι ώρα να φύγω από τη VB και να πάω σε κάτι "c". Πιστεύω ότι η C# θα είναι καλή για αρχή όμως. Μέχρι στιγμής οι μόνες διαφορές που είδα από VB σε C# είναι το πως συντάσσεται η κάθε γραμμή.

    Εάν πάω σε C++, τότε τα πράγματα αλλάζουν πολύ. Εκτός του ότι λείπουν πολλά πράγματα, δεν θα μπορώ να χρησιμοποιήσω πια array με την κλασική έννοια MyString() διότι μόλις μπει σε ένα function μέσα, όλα έγιναν σκατά! ξεχνάει τι είναι και γίνεται ένα pointer το οποίο δεν ξέρει ούτε το μέγεθός του!

    OMG! δεν είναι έτσι και η C# ε??? θα τρελαθώ αν είναι :(


    Anyway. θα κάνω το πρώτο βήμα σε C#, και αργότερα σε c++.

    Έχω ήδη δουλέψει c++ βασικά, όχι σε .net, απλή διότι ήθελαν να γίνεται compile και σε windows και σε linux και σε MacOS.

    Μου έφυγαν τα μισά μαλλιά που δεν είχε ούτε καν τα κλασικά "ToString" "GetParent" "StartsWith" "Left" "Right" έεεελεος. (έχω τον κώδικα που έγραψα στο τέλος του post για να απαντήσω και στα υπόλοιπα ερωτήματά σου)


    Προσπαθώ να χρησιμοποιώ λίγες γραμμές - αρκεί βέβαια να μην είναι υπερβολικά λίγες. Δλδ να μην είναι τόσο λίγες ώστε την επόμενη φορά που θα δω τον κώδικα, να μην καταλαβαίνω τη έγραψα.

    Αυτό δεν το είχα σκεφτεί ποτέ.. Δεν κάνω πολλές κλάσεις, αλλά όταν χρειαστεί να κάνω κάτι τέτοιου τύπου, τότε κάνω κλάση... δεν έχω χρησιμοποιήσει ποτέ structure. Νομίζω ότι όταν διάβαζα γι αυτά τα πράγματα, έλεγε εκεί ότι η κλάση είναι η εξέλιξη του structure. Οπότε σκέφτηκα, αν είναι να χρησιμοποιήσω κάτι.. ας χρησιμοποιήσω την εξέλιξη (class).

    Όμως απ'ότι κατάλαβα λες ότι η κλάση είναι πιο βαριά ε? Άρα αφού δεν κάνω καμία φορά inherit, ας αλλάξω και τις 3 κλάσεις που έχω σε structures. right?

    degrade είναι να φανταστώ κάτι σαν αυτό που έκανα εγώ? δηλαδή κάτι που θα έπρεπε να ήταν control αλλά το έγινε σε form?

    Ratio όσον αφορά τι???? Μέγεθος?? Width/Height?


    Τέλος, το typebox που θα ήθελα να δεις εάν έχεις κάποιο χρόνο, είναι εδώ: http://www.dotnetzone.gr/cs/forums/thread/72468.aspx

    δυστυχώς το text editor του forum είναι λίγο αδύναμο και δεν μου επιτρέπει να κάνω μια όμορφη παρουσίαση.. εάν θες να δεις παρουσίαση, δες απευθείας στην ιστοσελίδα μου http://www.NihilisTsLab.com/typebox


    Κώδικας που έκανα σε pure C++:


    #include <string>
    #include <vector>
    #include <fstream>
    #include <sstream>
    #include <iostream>
    #include <type_traits>
    #include <boost/algorithm/string/predicate.hpp>
    #include <boost/lexical_cast.hpp>
    using namespace std;

    #define VbCrLf "\n"
    #define VbTab "\t"

    string AppPath;
    string AppFile;
    string CurrentLanguage = "en-GB";


    template<typename T> static string ToString(const T &Var) {
      ostringstream ossVariableReader;
      ossVariableReader << Var;
      return ossVariableReader.str();
     }

    template<typename T> static T FromString(const string &Str) {
      istringstream issStringReader(Str);
      T Var;
      issStringReader >> Var;
      return Var;
     }

    string GetParent(char *FileOrPathName) {
     string Return;
     string strPath = FileOrPathName;

     strPath = ToString(FileOrPathName);

     return strPath.substr(0, strPath.find_last_of("/\\"));
    }


    bool Contains(string str, string StringToBeContained) {
     unsigned Index = str.find(StringToBeContained);

     if (Index != string::npos) {
      return true;
     }
     else {
      return false;
     }
    }

    bool StartsWith (string Str, string StartsWithText) {
     return boost::starts_with(Str, StartsWithText);
    }

    bool EndsWith (string Str, string EndsWithText) {
     return boost::ends_with(Str, EndsWithText);
    }

    string Replace(string strToBeAmended, string ReplaceWhat, string WithWhat) {

     string Result = strToBeAmended;
     if (Contains(strToBeAmended,ReplaceWhat)) {
      int IndexOfReplaceWhat = strToBeAmended.find(ReplaceWhat);
      int LengthOfReplaceWhat = ReplaceWhat.length();
      Result = strToBeAmended.replace(IndexOfReplaceWhat, LengthOfReplaceWhat, WithWhat);
     }

     return Result;
    }

    string Left(string Str, int Length) {
     return Str.substr(0, Length);
    }

    string Right(string Str, int Length) {
     return Str.substr(Str.length() - Length, Length);
    }

    string Mid(string Str, int StartIndex, int Length) {
     return Str.substr(StartIndex, Length);
    }

    string SubString(string Str, int StartIndex) {
     return Str.substr(StartIndex, Str.length() - StartIndex);
    }

    void StringStreamRemove(stringstream &ssStringStream, int StartIndex, int Length) {
     ssStringStream.str(Left(ssStringStream.str(), StartIndex) + Right(ssStringStream.str(), ssStringStream.str().length() - Length - StartIndex));
    }

    template<typename T> static void StringStreamAppend(stringstream &ssStringStream, T &Var) {
     string strVar = ToString(Var);
     string strPrevious = ssStringStream.str();

     ssStringStream.str(strPrevious + strVar);
    }

    template<typename T> static void StringStreamAppendLine(stringstream &ssStringStream, T &Var) {
     string strVar = ToString(Var);
     string strPrevious = ssStringStream.str();

     ssStringStream.str(strPrevious + VbCrLf + strVar);
    }
    void StringStreamAppendLine(stringstream &ssStringStream) {
     string strPrevious = ssStringStream.str();
     ssStringStream.str(strPrevious + VbCrLf);
    }

    ////////////////////
    //Actual Functions//
    ////////////////////

    string GetSubstrAfterString(const string &StrToBeSearched, const string &StrToGetSubstrAfter, const string &ResultIfStrNotFound = "", bool blStartsWith = false)
    {
     string strResult = ResultIfStrNotFound;
     if (StrToBeSearched.find(StrToGetSubstrAfter) != string::npos)
     {
      int Index = -1;
      if (! blStartsWith)
      {
       Index = StrToBeSearched.find(StrToGetSubstrAfter) + StrToGetSubstrAfter.length();
      }
      else if (StartsWith(StrToBeSearched, StrToGetSubstrAfter))
      {
       Index = StrToGetSubstrAfter.length();
      }
      if (Index != -1)
      {
       strResult = StrToBeSearched.substr(Index);
      }
     }
     return strResult;
    }
    string GetSubstrAfterString(vector<string> &LstToBeSearched, const string &StrToGetSubstrAfter, const string &ResultIfStrNotFound = "", bool blStartsWith = true)
    {
     string strResult = ResultIfStrNotFound;
     for (unsigned i = 0; i < LstToBeSearched.size(); i++)
     {
      if (Contains(LstToBeSearchedIdea, StrToGetSubstrAfter))
      {
       int Index = -1;
       if (! blStartsWith)
       {
        Index = LstToBeSearchedIdea.find(StrToGetSubstrAfter) + StrToGetSubstrAfter.length();
       }
       else if (StartsWith(LstToBeSearchedIdea, StrToGetSubstrAfter))
       {
        Index = StrToGetSubstrAfter.length();
       }
       if (Index != -1)
       {
        strResult = LstToBeSearchedIdea.substr(Index);
        break;
       }
      }
     }
     return strResult;
    }

    vector<string> GetMultipleSubstrAfterString(vector<string> &LstToBeSearched, const string &StrToGetSubstrAfter, bool ReturnNullListOnStrNotFound, bool blStartsWith = false) {
     vector<string> strResult = vector<string>();
     if (! ReturnNullListOnStrNotFound) {
      strResult.push_back("");
     }
     for (unsigned i = 0; i < LstToBeSearched.size(); i++) {
      if (Contains(LstToBeSearchedIdea, StrToGetSubstrAfter)) {
       int Index = -1;
       if (! blStartsWith) {
        Index = LstToBeSearchedIdea.find(StrToGetSubstrAfter) + StrToGetSubstrAfter.length();
       }
       else if (StartsWith(LstToBeSearchedIdea, StrToGetSubstrAfter)) {
        Index = StrToGetSubstrAfter.length();
       }
       if (Index != -1) {
        strResult.push_back(LstToBeSearchedIdea.substr(Index));
       }
      }
     }

     return strResult;
    }

    string doProperPathName(string &DirectoryPath)
    {
     if (DirectoryPath.find("\\\\") != string::npos)
     {
      DirectoryPath = Replace(DirectoryPath, "\\\\", "\\");
     }
     if (DirectoryPath.find("/") != string::npos)
     {
      DirectoryPath = Replace( DirectoryPath, "/", "\\");
     }
     if (! EndsWith(DirectoryPath, "\\"))
     {
      DirectoryPath = DirectoryPath + "\\";
     }
     return DirectoryPath;
    }

    string doProperFileName(const string &FileName) {
     string Result = FileName;

     if (Result.find("\\\\") != string::npos)
     {
      Result = Replace(FileName, "\\\\", "\\");
     }
     if (Result.find("/") != string::npos)
     {
      Result = Replace(Result, "/", "\\");
     }
     if (EndsWith(Result, "\\"))
     {
      Result = Result.substr(0, Result.length() - 1);
     }
     return FileName;
    }


    template<typename T> string ArrayBox(vector<T> &var, const string &NonDelimitDelimiter = VbTab) {
     string Result = ArrayBox(false, "", 1, true, var, false, NonDelimitDelimiter);
     return Result;
    }
    template<typename T> string ArrayBox(bool doNumeriseItems, vector<T> &var, const string &NonDelimitDelimiter = VbTab) {
     string Result = ArrayBox(doNumeriseItems, "", 1, true, var, false, NonDelimitDelimiter);
     return Result;
    }
    template<typename T> string ArrayBox(const string &doDelimitItems, vector<T> &var, const string &NonDelimitDelimiter = VbTab) {
     string Result = ArrayBox(false, doDelimitItems, 0, true, var, false, NonDelimitDelimiter);
     return Result;
    }
    template<typename T> string ArrayBox(int SplitOnNum, vector<T> &var, bool IgnoreDelimitSpace = false, const string &NonDelimitDelimiter = VbTab) {
     string Result = ArrayBox(false, "", SplitOnNum, true, var, IgnoreDelimitSpace, NonDelimitDelimiter);
     return Result;
    }
    template<typename T>
    string ArrayBox(bool doNumeriseItems, const string &doDelimitItems, int SplitOnNum, bool IgnoreNullValues, vector<T> &var, bool IgnoreDelimitSpace = false, const string &NonDelimitDelimiter = VbTab, const string DefaultSpace = " ") {
     stringstream sbRet;
     for (unsigned i = 0; i < var.size(); i++) {
      if (varIdea != 0 || (!IgnoreNullValues)) {
       if (doNumeriseItems) {
        StringStreamAppend(sbRet, (ToString(i + 1) + "] ") );
       }

          StringStreamAppend(sbRet, varIdea);

       if (doDelimitItems != "" && i != var.size() - 1) {
        StringStreamAppend(sbRet, (doDelimitItems));
        if (! IgnoreDelimitSpace) {
         StringStreamAppend(sbRet, (DefaultSpace));
        }
       }
       if ((SplitOnNum > 0) && (((i + 1) % SplitOnNum) == 0) && (i != (var.size() - 1))) {

        if (IgnoreDelimitSpace) {
         if ((doDelimitItems != "") && Right(sbRet.str(), doDelimitItems.length()) == doDelimitItems) {
          StringStreamRemove(sbRet, sbRet.str().length() - (doDelimitItems.length()), doDelimitItems.length());
         }
        }
        else if ((doDelimitItems != "") && Left(Right(sbRet.str(), doDelimitItems.length() + DefaultSpace.length()), doDelimitItems.length()) == doDelimitItems) {
         StringStreamRemove(sbRet, sbRet.str().length() - (doDelimitItems.length() + DefaultSpace.length()), doDelimitItems.length() + DefaultSpace.length());
        }
        StringStreamAppendLine(sbRet);
       }
       else if ((i < (var.size() - 1)) && doDelimitItems == "") {
        StringStreamAppend(sbRet, (NonDelimitDelimiter));
       }
      }
     }

     if (doDelimitItems != "" && Left(Right(sbRet.str(), (doDelimitItems.length() + 1)), doDelimitItems.length()) == doDelimitItems) {
      StringStreamRemove(sbRet, sbRet.str().length() - (doDelimitItems.length() + 1), doDelimitItems.length() + 1);
     }
     return sbRet.str();
    }


    string ReadFile(char *FileName, string &Var) {
        string line;
        string Result;
     int CurLine = 0;

        ifstream TextReader;
        TextReader.open(FileName);

     getline(TextReader, line );

     if (line != "")
     {
      CurLine += 1;

      stringstream ssCurLine; //To become (of T) -> to string
      ssCurLine << CurLine;
      string strCurLine = ssCurLine.str();

      Result = strCurLine + ") " + line;

      while ( TextReader.good() ) {
       getline(TextReader, line );
       CurLine += 1;

       stringstream ssCurLine; //To become (of T) -> to string
       ssCurLine << CurLine;
       string strCurLine = ssCurLine.str();

       Result += VbCrLf + strCurLine + ") " + line;
      }
     }


        TextReader.close();

     Var = Result;
        return Result;
    }

    void WriteFile(char *FileName, string TextTobeWritten) {
     ofstream TextWriter;

     TextWriter.open(FileName);
     TextWriter <<TextTobeWritten;
     TextWriter.close();
    }

    #include <exception>
    #include "modCommon.h"
    #include "clsFunctions.h"
    #include <vector>
    using namespace std;

    #define VbCrLf "\n"
    #define VbTab "\t"

    int i = 0;
    int NumberOfLoops = 0;
    double dblStartingLoop;
    double dblEndingLoop;

    string ReadFile(char *FileName);

    //Spherical Function Vars
    double R;
    double q;

    int main(int argc, char* argv[]) {
    try {
     AppPath = GetParent(argv[0]);
     AppFile = argv[0];

     clsFunctions Functions; //Instantiating the Functions' Class

        do {
         cout <<"Please give a number for 'R': ";
         cin >>R;
        }
        while ( R == 0 );

        do {
         cout <<"Please type the starting number of the loop: ";
         cin >>dblStartingLoop;
        }
        while ( dblStartingLoop == 0 );

        do {
         cout <<"Please type the ending number of the loop: ";
         cin >>dblEndingLoop;
        }
        while ( dblEndingLoop == 0 );

        do {
         cout <<"Please state how many loops you want to be performed: ";
         cin >>NumberOfLoops;
        }
        while ( NumberOfLoops <= 0 );


     vector<double> Results;

     for (int i = 0; i < NumberOfLoops; i++) {
      double q = ((dblEndingLoop - dblStartingLoop) / NumberOfLoops * (i+1)) + dblStartingLoop;
      Results.push_back(Functions.SphericalBesselFunction(R, q));
     }

     string srtResults = ArrayBox(1, Results);

     cout <<VbCrLf <<srtResults;
     WriteFile("Results.txt", srtResults);

     cout <<"\nDone!";

     cout <<VbCrLf <<VbCrLf;
     system("pause");
        return 0;


    } catch (exception& e) {
    cout << "An error has occured!" << VbCrLf << e.what() << VbCrLf;
    system("pause");
    }
    }


  •  24-04-2013, 22:16 72523 σε απάντηση της 72521

    Απ: [VB] Mouse Cursor Disappears while inside the form

    Πριν πας σε c# ρίξε μιά ματιά εν τάχει στην σύνταξη της γλώσσας, γενικά είναι πιό λιτή από την vb και δεν κρύβει παγίδες, αφού με την vb μπορείς πολύ εύκολα να δημιουργήσεις προβλήματα εκεί που δεν το φανταζεσαι.

    Ε όχι βέβαια η c# χρησιμοποιεί το ίδιο framework με την vb.

    Σε καμία περίπτωση μην παρατάς την C++, ιδίως τώρα που πήρες το βάπτισμα του πυρός, μην κάνεις τις δικές μου μ****ς.

    http://www.relisoft.com/book/ 


    Ο κώδικας σε C++ που έδειξες δεν νομίζω να παίζει σε Linux το System("pause") νομίζω είναι μόνο γιά windows.

    Να αποφεύγεις τα define κάθε είδους, να μην βάζεις αγκύλες δεξιά από functions κλπ. Δεν τυπώνουμε πιά τα listings γιά να τα διαβάζουμε, ο σκληρός μας έχει χώρο πάνω από 8 μέγα και επίσης έχουμε και οθόνεςSmile

    Μην κάνεις functions μόνο και μόνο γιά να τους αλλάξεις το όνομα, το Starts_With δεν χρειάζεται να γίνει StartsWith, θες να σε μισήσει ο θείος Bjarne;

    Ναι γιά το ratio των πλευρών μιλάω, θα μπορούσε ίσως και να αφορά το ratio του client area αλλά εδώ με έπιασες αδιάβαστο :)

    και templates βλέπω και vectors και catch άρχοντας είσαι. Υπάρχει και η C++/CLI και άσε τον Θείο να λέει.

    degrade είναι το να προσπαθούμε να δίνουμε 3d look αλλάζωντας τα χρώματα από πιό ελαφρύ σε πιό σκούρο σε μιά επιφάνεια ή το αντίθετο.

    Δεν πάμε ποτέ σε club αλλά σε rock club, ακούμε Sabbath, maiden, motorhead, AC/DC κλπ. Έχουμε μακριά μαλλιά και γράφουμε κώδικα την νύχτα.

    Γενικά δεν κάνουμε κλάσεις τα πάντα, ιδίως στις περιπτώσεις που χρειαζόμαστε δομές με value types. Γιατί να κουράζουμε τον Garbage Collector χωρίς λόγο;

  •  26-04-2013, 15:41 72526 σε απάντηση της 72523

    Απ: [VB] Mouse Cursor Disappears while inside the form

    Libra Storm:

    Πριν πας σε c# ρίξε μιά ματιά εν τάχει στην σύνταξη της γλώσσας, γενικά είναι πιό λιτή από την vb και δεν κρύβει παγίδες, αφού με την vb μπορείς πολύ εύκολα να δημιουργήσεις προβλήματα εκεί που δεν το φανταζεσαι.

     

    Καταλαβαίνω πόσο τέρμα ηλίθια είναι η ερώτηση που θα κάνω τώρα, αλλά.. που βλέπω την σύνταξη της γλώσσας??



    Libra Storm:
    Ε όχι βέβαια η c# χρησιμοποιεί το ίδιο framework με την vb.

    Αυτό είναι απάντηση στο αν διαλύεται το array σε pointer που δεν γνωρίζει ούτε το πόσα elements έχει μέσα?

    Αν ναι, τότε χαίρομαι πάρα πολύ.. αυτό σημαίνει ότι θα μπορώ να χρησιμοποιώ και Var() :)

    Libra Storm:
    Σε καμία περίπτωση μην παρατάς την C++, ιδίως τώρα που πήρες το βάπτισμα του πυρός, μην κάνεις τις δικές μου μ****ς.

    http://www.relisoft.com/book/ 

    Χαχα, πραγματικά βάπτισμα του πυρός όμως..!

    Τρελάθηκα μέχρι να γράψω αυτόν τον κώδικα, και είναι ότι πιο απλό μπορεί να γραφτεί. Που να ήθελα να γράψω ένα πραγματικό (ολοκληρωμένο) πρόγραμμα!


    Libra Storm:
    Ο κώδικας σε C++ που έδειξες δεν νομίζω να παίζει σε Linux το System("pause") νομίζω είναι μόνο γιά windows.

    Crap! Δεν το ήξερα.. oh well, θα αντικαταστήσω το System("pause")  με "cin"



    Libra Storm:
    Να αποφεύγεις τα define κάθε είδους, να μην βάζεις αγκύλες δεξιά από functions κλπ. Δεν τυπώνουμε πιά τα listings γιά να τα διαβάζουμε, ο σκληρός μας έχει χώρο πάνω από 8 μέγα και επίσης έχουμε και οθόνεςSmile 

    Δεν καταλαβαίνω γιατί να μην κάνω define, αφού αυτό που έκανα define αλλάζει σε απλό κείμενο προτού γίνει compile ο πηγαίος κώδικας και είναι σαν να μην το είχα χρησιμοποιήσει in the first place..


    Libra Storm:
    Μην κάνεις functions μόνο και μόνο γιά να τους αλλάξεις το όνομα, το Starts_With δεν χρειάζεται να γίνει StartsWith, θες να σε μισήσει ο θείος Bjarne;
     

    Μα δεν έχει καθόλου function η c++ για "Starts With"! έχει????

    Νομίζω ότι πρέπει να χρησιμοποιήσει της "boost", και δεν μπορώ να βάζω ολόκληρο το μακρινάρι "boost::starts_with(Str, StartsWithText);" κάθε φορά...


    Libra Storm:
    Ναι γιά το ratio των πλευρών μιλάω, θα μπορούσε ίσως και να αφορά το ratio του client area αλλά εδώ με έπιασες αδιάβαστο :)

    Τέλειο! "1.618" ε? Δεν είχα ιδέα ότι υπήρχε κάτι τέτοιο, αλλά μου ακούγετε πολύ ωραίο!

    Θα το ρυθμίσω έτσι ώστε από όποια μεριά κι αν κάνει resize ο χρήστης, να προσαρμόζεται η άλλη ώστε βγαίνει αυτό το ratio.

    Έτσι λύνεται και το πρόβλημα της παραμόρφωσης των εικόνων (background picture που βάζω πάντα) των skin! 2 σε ένα! Απλή, αλλά πολύ δυνατή ιδέα. Ευχαριστώ! :)


     

    Libra Storm:
    και templates βλέπω και vectors και catch άρχοντας είσαι. Υπάρχει και η C++/CLI και άσε τον Θείο να λέει.

    Στο συγκεκριμένο δεν μπορώ να το κάνω έτσι, διότι δεν θα γίνεται compile σε linux/MacOs (νομίζω δηλαδή.. αφού η CLI είναι Microsoft.. right?)


    Libra Storm:
    Δεν υπάρχει τίποτε πιό επαγγελματικό ( Look and feel ) από ένα UI που φτιάχνεται από controls της Microsoft τα degrade πέθαναν.

    degrade είναι το να προσπαθούμε να δίνουμε 3d look αλλάζωντας τα χρώματα από πιό ελαφρύ σε πιό σκούρο σε μιά επιφάνεια ή το αντίθετο.

    Χμμμ.. δεν καταλαβαίνω όμως σε τι αναφέρεσαι.. δηλαδή για πιο πράγμα που έκανα το είπες αυτό?


    Libra Storm:
    Δεν πάμε ποτέ σε club αλλά σε rock club, ακούμε Sabbath, maiden, motorhead, AC/DC κλπ. Έχουμε μακριά μαλλιά και γράφουμε κώδικα την νύχτα.

    Χαχαχα, κοντά έπεσες :) Πράγματι γράφω αρκετό κώδικα τη νύχτα (τουλάχιστον στις διακοπές.. αφού τότε ξυπνάω το μεσημέρι και κοιμάμαι το πρωί :Ρ )

    Αλλά ακούω Melodic Death Metal (Dark Tranquillity, Wintersun, Scar Symmetry..), και πάω σε Ydrogios/Block 33, Principal theatre κτλ :)


    Libra Storm:
    Γενικά δεν κάνουμε κλάσεις τα πάντα, ιδίως στις περιπτώσεις που χρειαζόμαστε δομές με value types. Γιατί να κουράζουμε τον Garbage Collector χωρίς λόγο;

    Πολύ σωστό :) Thank you so much!

    Μερικές φορές νιώθω ότι τα μισά απ'όσα ξέρω τα έχω μάθει thanks to you

    Ανυπομονώ να ακούσω τη γνώμη σου για το TypeBox ( http://dotnetzone.gr/cs/forums/thread/72468.aspx ) :)



Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems