KeyDown по-разному реагирует на отдельные текстовые поля - PullRequest
0 голосов
/ 28 апреля 2018

Если странно, это случится со мной.

Я пишу приложение C # Windows Form (VS 2010), состоящее из нескольких текстовых полей, а также нескольких ярлыков для них всех. За исключением имен Textbox, все действия одинаковы (копируются и вставляются, затем подставляется правильное имя TextBox. Все они включают в себя событие TextChange и событие KeyDown. Событие KeyDown должно перехватить ключ возврата и обработать данные.

Базарная часть заключается в том, что первый раздел (рабочая частота региона) работает нормально. Все остальные никогда не вступают в событие KeyDown. Я просмотрел и сравнил свойства всех текстовых полей и не вижу разницы. Я попытался переместить разделы, чтобы увидеть, если это порядок в коде. Ничего не меняется Рабочая частота всегда работает. Больше ничего не делает. Я перепробовал почти все, что мог придумать. Я даже пытался перейти от KeyDown к KeyUp без разницы;

У кого-нибудь есть идеи?

Вот код. Я включил только первые 2 текстовых поля, так как остальные по сути одинаковы.

    // Constants
    public static readonly double rad = Math.PI / 180, DEG = 180 / Math.PI;   // PI to RAD
    public const double solM = 299792458;            // Speed of light in meters/sec
    public const double solMm = solM / 1000;         // Speed of light in mega meters/sec
    public const double solFt = 983571056.43;       // Speed of light in feet/sec
    public const double ft2mtr = 0.3048;               // Convert Feet to Meters

    // Parameters
    public static double D = 60;                            // Loop diameter
    public static double C = D*Math.PI;                  // Loop Circumfrence
    public static double conductorD = 0.375;          // Conductor diameter
    public static double RL = 0;                            // Added loss resistance 
    public static double xmitP = 25;                      // RF xmitter power
    public static double freq = 14.1;                     // Frequence


    public MagLoopAntenna()
    {
        InitializeComponent();

        // Start off with some default parameter values
        tbFreq.Text = "14.1";                        // Target Frequency
        tbLoopDia.Text = "60";                      // Antenna Loop Diameter
        tbUnitsLoopDia.Text = "in";             
        tbConductorDia.Text = "0.5";             // Conductor Diameter
        tbUnitsConductorDia.Text = "in";        // Conductor Diameter Units
        tbAddedLossR.Text = "0";                 // Added Loss in ohms
        tbRfPower.Text = "25";                     // RF Power in Watts
    }

    private bool nonNumberEntered = false;  // Command Key Flag

    #region Operating Frequency
    private void tbFreq_TextChanged(object sender, EventArgs e)
    {
        int test;
        test = 0;           // place for breakpoint
    }
    private void tbFreq_KeyDown(object sender, KeyEventArgs e)
   {
        // Initialize the flag to false.
        nonNumberEntered = false;
        // Determine whether the keystroke is a number from the top of the keyboard.
        if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
       {
            // Determine whether the keystroke is a number from the keypad.
            if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
            {
                // Determine whether the keystroke is a backspace.
                if (e.KeyCode != Keys.Back)
                {
                    // A non-numerical keystroke was pressed.
                    // Set the flag to true and evaluate in KeyPress event.
                    nonNumberEntered = true;
                }

                if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Tab)
               {
                   // Note: may want calculate everything at this point.
                   // We got here now move on to the next textbox 
                   freq = Convert.ToDouble(tbFreq.Text);
                   tbLoopDia.Focus();
                }
            }
         }
    }
    #endregion

    #region Loop Diameter
    private void tbLoopDia_TextChanged(object sender, EventArgs e)
    {
        int test;
        test = 0;   // Just a place to put a breakpoint
    }
    private void tbLoopDia_KeyDown(object sender, KeyEventArgs e)
    {
        // Initialize the flag to false.
        nonNumberEntered = false;
        // Determine whether the keystroke is a number from the top of the keyboard.
        if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
        {
            // Determine whether the keystroke is a number from the keypad.
            if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
            {
                // Determine whether the keystroke is a backspace.
                if (e.KeyCode != Keys.Back)
                {
                    // A non-numerical keystroke was pressed.
                    // Set the flag to true and evaluate in KeyPress event.
                    nonNumberEntered = true;
                }
                if (e.KeyCode == Keys.Enter)
                {
                    int gothere;
                    gothere = 1;        // Just for a breakpoint

                    // Note: may want calculate everything at this point.
                    // We got here now move on to the next textbox 
                    //tbConductorDia.Focus();          // will implement this once its' working   
                }
            }
        }
    }
...