2014-01-30 4 views
1

Я пытаюсь создать pic-box в форме, которая при нажатии в пределах определенного диапазона X/Y (прямоугольник) открывается вторая форма. Моя проблема заключается в получении строковые значения lblX и lblY правильно действовать в моей «если» заявление ниже:C# convert "label.text" string to integer

private void picboxMain_MouseUp(object sender, MouseEventArgs e) 
    { 
     Convert.ToInt32(lblX.Text); 
     Convert.ToInt32(lblY.Text); 

     if ((lblX >= 155 && lblX <= 179) && (lblY >= 145 && lblY <= 160)) 
     { 
      Form2 Form2 = new Form2(); 
      Form2.Show(); 
     } 
    } 

Надеюсь, это понятно, что я пытаюсь сделать. Ошибка указывает, что «оператор> = не может использоваться с меткой и int». Может ли кто-нибудь увидеть, что мне не хватает, и порекомендовать решение?

Спасибо, А.

ответ

3

В Convert.ToInt32 возвращает int так что вам нужно назначить, что к переменной, а затем проверить переменную

private void picboxMain_MouseUp(object sender, MouseEventArgs e) 
{ 
    int x = Convert.ToInt32(lblX.Text); 
    int y = Convert.ToInt32(lblY.Text); 

    if ((x >= 155 && x <= 179) && (y >= 145 && y <= 160)) 
    { 
     Form2 Form2 = new Form2(); 
     Form2.Show(); 
    } 
} 
8

Convert.ToInt32возвращает целое значение. Вы должны назначить его:

var x = Convert.ToInt32(lblX.Text); 
var y = Convert.ToInt32(lblY.Text); 

if ((x >= 155 && x <= 179) && (y >= 145 && y <= 160)) 
{ 
    Form2 Form2 = new Form2(); 
    Form2.Show(); 
} 

Также рекомендуется использовать int.TryParse и обработку неудачных переходов в случае плохой вход:

int x; 
int y; 
if (!int.TryParse(lblX.Text, out x) || !int.TryParse(lblY.Text, out y)) 
{ 
    // Oh no, a problem! Do something, quick! 
} 
else 
{ 
    if ((x >= 155 && x <= 179) && (y >= 145 && y <= 160)) 
    { 
     Form2 Form2 = new Form2(); 
     Form2.Show(); 
    } 
} 
+0

Спасибо, Это исправило мою первоначальную проблему. Программа работает нормально, но при нажатии меня теперь получает следующую ошибку: «formatException ... строка ввода не в правильном формате» и указывает на заявления о конверсиях? – ajm

+0

Тогда значения строк меток не являются целыми числами. –

3

Вы преобразующий текст лейбла целыми числами, но вы не сохраняя их в любом месте , позже вы сравниваете Labels против этих ценностей, она должна быть как:

private void picboxMain_MouseUp(object sender, MouseEventArgs e) 
{ 
    int X = Convert.ToInt32(lblX.Text); 
    int Y = Convert.ToInt32(lblY.Text); 

    if ((X >= 155 && X <= 179) && (Y >= 145 && Y <= 160)) 
    { 
     Form2 Form2 = new Form2(); 
     Form2.Show(); 
    } 
} 

Сохраните результат преобразования в переменных X и Y, а затем сравнить их в своем состоянии.

Вы также можете посмотреть int.TryParse методы для более безопасного анализа (исключение не возникает в случае неудачного разбора). Также рассмотрите возможность использования Microsoft coding conventions для переменных имен.

3

Convert.ToInt32 возвращает int следует присвоить его переменной сравнить преобразованное значение метки к вашим координатам

private void picboxMain_MouseUp(object sender, MouseEventArgs e) 
     { 
      int lx= Convert.ToInt32(lblX.Text); 
      int ly =Convert.ToInt32(lblY.Text); 

      if ((lx >= 155 && lx <= 179) && (ly >= 145 && ly <= 160)) 
      { 
       Form2 Form2 = new Form2(); 
       Form2.Show(); 
      } 
     } 
1

Вам нужно сохранить результаты преобразования в переменные.

private void picboxMain_MouseUp(object sender, MouseEventArgs e) 
{ 
    int x = Convert.ToInt32(lblX.Text); 
    int y = Convert.ToInt32(lblY.Text); 

    if ((x >= 155 && x <= 179) && (y >= 145 && y <= 160)) 
    { 
     Form2 Form2 = new Form2(); 
     Form2.Show(); 
    } 
}