פורסם 2012 בדצמבר 2612 שנים אהלן. אני נתקלתי בבעיה. בניתי תוכנה קטנה (Visual Basic) שמזהה לחיצה בשלט XBOX ושולחת מקש במקלדת לפי תו שרשום בbtnY.text: If currentStateButtons.Buttons.Y = ButtonState.Pressed Then My.Computer.Keyboard.SendKeys(btnY.Text, False) End Ifהבעיה היא, שעד שאני משחרר את לחיצת הכפתור בשלט, עוברת כחצי שניה ואני מסיים עם משהו כזה (נניח הגדרתי מחרוזת text בשדה btnY):texttexttexttexttextבמקום שילחץ לי על המקלדת פעם אחת textאיך אני פותר את הבעיה?אני משתמש בVisual Studio 2010.
פורסם 2012 בדצמבר 2612 שנים מחבר הבעיה שיש או - מצב pressed או מצב released. הקוד פועל על טיימר, ואם אני מגדיר את הIF ב: released אז הקוד יפעל תמיד כשהכפתור לא לחוץ.שינוי interval של טיימר לא עוזר ומחזיר לי את אותה הבעיה שתיארתי בהודעה הראשונה.או שלא הבנתי אותך נכון?
פורסם 2012 בדצמבר 2612 שנים תוסיף עוד משתנה ודרכו תבדוק אם בוצעה לחיצה-משהו כזה:pressed=0\\מאפס את המשתנה למקרה שהוא לא אופס לפניIF currentStateButtons.Buttons.Y = ButtonState.Pressed Then pressed=1\\מגדיר את המשתנה כ1 במצב של לחיצהif(pressed>=1) then My.Computer.Keyboard.SendKeys(btnY.Text, False)end if End Ifpressed=0//מאפס את המשתנה שוב כדי שלא יהיו שגיאות
פורסם 2012 בדצמבר 2612 שנים מחבר לא, זה לא עובד הבעיה כנראה בזה שהכפתור לחוץ הרבה זמן (בשביל תוכנה) וכל עוד זה לחוץ, הפרוצדורה שכתבת חוזרת על עצמה כארבע-חמש פעמים. לא משנה איך אני לוחץ את הכפתור, אפילו נגיעה קטנה ועדינה, עדיין יהיו לי 3-4 הדפסות.
פורסם 2012 בדצמבר 2612 שנים אז תעשה את אותו הקטע עם המשתנה-תראה לכמה הוא מגיע בלחיצה הקטנה הזאת, ואז תעשה שידפיס אם הערך שלו גדול מכמה שהגעת אליועריכה- רגע אתה שם את הקוד בתוך טיימר?
פורסם 2012 בדצמבר 2612 שנים מחבר כן השתמשתי בטיימר. יש אופציה יותר טובה? בינתיים פתרתי את זה ב: Threading.Thread.Sleep(200) אבל אם אפשרי לא להשתמש בטיימר אלא במשהו יותר יעיל, אשמח להצעות. תודה
פורסם 2012 בדצמבר 2612 שנים אתה רוצה שיהיה לזה מוניטורינג קבוע?האמת שלא נגעתי בוויזואל בייסיק שנים אבל הייתי מנסה לשים את זה בform.active או משהו דומה..אני מאמין שחיפוש בגוגל ימצא לך יותר תוצאות
פורסם 2012 בדצמבר 2612 שנים לא הבנת אותי נכון.צור משתנה בשם pressed.אם הכפתור לחוץ וגם pressed==false אז בצע את הפעולה ושים pressed=true.אם הכפתור לא לחוץ אז שים pressed=false.
פורסם 2012 בדצמבר 2612 שנים מחבר עשיתי בדיוק מה שאמרת וזה לא עובד Pressed = FalseIf currentStateButtons.Buttons.B = ButtonState.Pressed Then If (currentStateButtons.Buttons.B = ButtonState.Pressed) And (BPressed = False) Then My.Computer.Keyboard.SendKeys(btnB.Text) BPressed = True End If ElseIf currentStateButtons.Buttons.B = ButtonState.Pressed Then BPressed = False End IfEnd If ניסיתי else במקום elseif ועוד כמה קומבינציות. שום דבר.
פורסם 2012 בדצמבר 2612 שנים אולי תעלה את כל הקוד ולא רק את הקטע הזה? קשה להבין מה בדיוק קורה מתי הקוד הזה נקרא.
פורסם 2012 בדצמבר 2612 שנים מחבר זה כל הקוד: Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Dim currentStateButtons As GamePadState = GamePad.GetState(Microsoft.Xna.Framework.PlayerIndex.One) Dim BPressed As Boolean BPressed = False Label3.Text = BPressed If currentStateButtons.IsConnected = True Then If currentStateButtons.Buttons.A = ButtonState.Pressed Then If (currentStateButtons.Buttons.A = ButtonState.Pressed) And (BPressed = False) Then My.Computer.Keyboard.SendKeys(btnA.Text) BPressed = True End If ElseIf currentStateButtons.Buttons.A = ButtonState.Pressed Then BPressed = False End If End IfEnd Sub
פורסם 2012 בדצמבר 2612 שנים תשמור את BPressed מחוץ לפונקציה, ואל תאפס אותו כל פעם. מה שקורה כרגע הוא שכל פעם שנכנסים לפונקציה הוא מתאפס, ככה שהבדיקה האם BPressed = False היא חסרת משמעות.חוץ מזה ה-ElseIf שלך שגוי - אתה בודק שוב שהכפתור לחוץ במקום לבדוק שהוא לא לחוץ (ובכלל היה מספיק רק לשים Else).
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.