<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Πρώτα Βήματα - Γλώσσες προγραμματισμού</title><link>https://www.dotnetzone.gr:443/cs/forums/74/ShowForum.aspx</link><description>Τα πρώτα βήματα στις γλώσσες VB6, VB.NET, και C#</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Που πήγε το keydown event?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/51229.aspx</link><pubDate>Tue, 02 Jun 2009 20:52:17 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:51229</guid><dc:creator>panagiotis_georgiadis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/51229.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=74&amp;PostID=51229</wfw:commentRss><description>&lt;P&gt;Όχι, δεν κατάλαβες καλά.&lt;/P&gt;
&lt;P&gt;Το Event KeyPress(object sender, KeyEventArgs) διαβάζει KeyData που είναι αυστηρά χαρακτήρες, ποτέ δε θα καταλάβει ότι πάτησες βελάκι. Για αυτό το σκοπό έχεις 2 λύσεις:&lt;/P&gt;
&lt;P&gt;1) Θα θέσεις το CausesValidation όλων των Controls στη φόρμα σου τα οποία έχουν αυτό το property (τα οποία κλέβουν το focus με το βελάκι) σε false, και θα χρησιμοποιήσεις το&amp;nbsp;KeyDown του αντίστοιχου control, το οποίο θα σου κάνει forward σε μια άλλη private συνάρτηση - δε θα πιάσεις όμως ποτέ το γεγονός ότι ο χρήστης πάτησε βελάκι.&lt;/P&gt;
&lt;P&gt;2) Πιο γενική λύση είναι να κατέβεις ένα επίπεδο χαμηλότερα και να κάνεις handle το Win32 keystroke event γράφωντας την εξής συνάρτηση στην φόρμα σου:&lt;/P&gt;&lt;PRE&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:black;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;          &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;protected&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;override&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;bool&lt;/SPAN&gt; ProcessCmdKey(&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;ref&lt;/SPAN&gt; Message msg, Keys keyData)
          {
               &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;return&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;base&lt;/SPAN&gt;.ProcessCmdKey(&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;ref&lt;/SPAN&gt; msg, keyData);
          }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;FONT face=Tahoma&gt;Έτσι μπορείς να πιάσεις το βελάκι. Ίσως όμως καλύτερα να σκεφτείς πρώτα γιατί είναι τόσο απαραίτητο στο χρήστη σου να καταφύγει σε τέτοιο τρόπο εισαγωγής δεδομένων,&lt;BR&gt;&lt;BR&gt;μια και τα Windows Applications είναι πλούσια σε γραφικές User Interface επιλογές, για να μη χρειάζονται τα παλιομοδίτικα DOS keystrokes.&lt;/FONT&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;FONT face=Tahoma&gt;Ένα tip: αν γράψεις "override" και spacebar στο Visual Studio σου ανοίγει παράθυρο AutoComplete με τη συλλογή από όλες τις overload που μπορείς να κάνεις&lt;/FONT&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;FONT face=Tahoma&gt;Για πειραματισμό (ή αλλιώς "το καλό το παλικάρι ξέρει κι άλλο μονοπάτι"), μπορείς να βάλεις ΟΛΑ τα event handlers που ειπώθηκαν παραπάνω στον κώδικά σου και να βάλεις ένα breakpoint στο καθένα. Όταν κάνεις debug θα δεις με ποια απ'όλα και με ποιά σειρά καλούνται.&lt;/FONT&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;FONT face=Tahoma&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/PRE&gt;</description></item><item><title>Απ: Που πήγε το keydown event?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/51015.aspx</link><pubDate>Wed, 27 May 2009 19:33:36 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:51015</guid><dc:creator>mclisme</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/51015.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=74&amp;PostID=51015</wfw:commentRss><description>Αν κατάλαβα καλά από το παράδειγμα πρέπει να προσθέσω την εντολή e.Handled = True στο keypress event μιας φορμας ωστε τα παντα να περνανε πρωτα απο αυτή. Όμως:&lt;br&gt;&lt;br&gt;1) Το keypress δεν μπορει να αναγνωρίσει τα arrow keys. ***&lt;br&gt;2) Ακόμα κ όταν το προσέθεσα όμως, πατώντας οποιοδήποτε κουμπί (όχι μόνο τα βελάκια) πάλι δεν δουλεύει.&lt;br&gt;&lt;br&gt;*** όχι το ίδιο το keypress αλλά το argument&amp;nbsp; e.KeyChar που είναι το μόνο που έχει για να αναγνωρίσει ποιό πλήκτρο πατήθηκε. Τα KeyDown, KeyUp κτλ. έχουν επιπλέον το argument e.KeyCode που μπορει να αναγνωρίσει όλα τα πλήκτρα.&lt;br&gt;</description></item><item><title>Απ: Που πήγε το keydown event?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/51008.aspx</link><pubDate>Wed, 27 May 2009 09:05:04 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:51008</guid><dc:creator>panagiotis_georgiadis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/51008.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=74&amp;PostID=51008</wfw:commentRss><description>&lt;P&gt;Προφανώς δεν άλλαξε γιατί το Button είναι Control που έχει CanSelect=true και μπορεί να κλέψει το Focus από το parent control. Δες το παράδειγμα στο MSDN:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/system.windows.forms.form.keypreview.aspx#Mtps_DropDownFilterText"&gt;http://msdn.microsoft.com/en-us/library/system.windows.forms.form.keypreview.aspx#Mtps_DropDownFilterText&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;όντως το KeyPreview πρέπει να είναι true, αλλά δεν αρκεί μόνο αυτό.&lt;/P&gt;
&lt;P&gt;Σαν γρήγορη λύση ίσως να βοηθούσε να βάλεις έναν αντιστοιχο event handler και για το Button.KeyDown, ο οποίος να στέλνει το event στον handler της φόρμας. Δεν το προτείνω όμως :-)&lt;BR&gt;Προτιμώ το παράδειγμα της Microsoft.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Απ: Που πήγε το keydown event?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/51006.aspx</link><pubDate>Wed, 27 May 2009 08:03:02 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:51006</guid><dc:creator>mclisme</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/51006.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=74&amp;PostID=51006</wfw:commentRss><description>Το έκανα μόλις, όμως δεν άλλαξε κάτι, ακόμα το πάτημα οποιοδήποτε πλήκτρου είναι σαν μην συμβαίνει.&lt;br&gt;</description></item><item><title>Απ: Που πήγε το keydown event?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/51005.aspx</link><pubDate>Wed, 27 May 2009 07:56:37 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:51005</guid><dc:creator>Panagiotis Kefalidis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/51005.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=74&amp;PostID=51005</wfw:commentRss><description>Άλλαξε το KeyPreview property της φόρμας σε True και θα δουλέψει. Ουσιαστικά έτσι μόνο η φόρμα θα κάνει Process τα KeyEvents κι όχι το control το οποίο θα έχει focus εκείνη την στιγμή.</description></item><item><title>Που πήγε το keydown event?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/51004.aspx</link><pubDate>Wed, 27 May 2009 07:41:59 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:51004</guid><dc:creator>mclisme</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/51004.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=74&amp;PostID=51004</wfw:commentRss><description>Σε μια απλή winform που περιέχει μόνο ένα picturebox, ένα timer και ένα colordialog ήθελα να μπορώ να σχεδιάζω στο picturebox κάποια σχέδια ανάλογα του αν ο χρήστης πατάει κάποιο απο τα τέσσερα βελάκια του πληκτρολογίου. Επειδή τα αντικείμενα picturebox δεν έχουν κανένα event τύπου Keypress ή Keydown/Up κατάφερα να το κάνω γράφοντας τον κώδικα στο Form1_KeyDown event και δούλευε μιά χαρά. Απο την στιγμή όμως που προσέθεσα ένα button, για κάποιο λόγο δεν συμβαίνει τίποτα όποιο πλήκτρο και αν πατήσω. Προσέθεσα το event Button1.KeyDown στον handler του Form1.KeyDown αλλά τίποτα. Όσο έχω Enabled το Button1 το πάτημα πλήκτρων δεν έχει κανένα αποτέλεσμα. Μόλις έκανα Disabled το Button1 τότε επανήλθε η προηγούμενη συμπεριφορά. Το περίεργο είναι ότι δοκίμασα να βρώ τι συμβαίνει με Step Into ώστε να με πάει στο event που λαμβανει τοπο μολις πατάω κάποιο κουμπί αλλά ακόμα και τότε δεν συνέβη τίποτα, πατάω πλήκτρα όμως o debugger δεν σταματά πουθενά.&lt;br&gt;Που οφείλεται αυτή η συμπεριφορά και πως μπορώ να συνεχίσω να κάνω ότι έκανα αλλά να έχω και κάποια button μέσα στη φόρμα μου?&lt;br&gt;</description></item></channel></rss>