Подводя итог моим комментариям сверху:
Когда вы звоните setScreenSize()
из OnFormLoad()
, вы будете устанавливать только локальные переменные W
и H
, которые вы определили в ваших методах.
public void setScreenSize()
{
int W = Screen.PrimaryScreen.Bounds.Width;
int H = Screen.PrimaryScreen.Bounds.Height;
Console.WriteLine("Height is: " + H + "width is: " + W);
}
Таким образом, эти переменные будут скрывать ваши поля, которые вы объявили в
public partial class Recording : Form
{
private System.Timers.Timer mousePositionTimer;
int W, H;
...
}
Таким образом, поскольку поля класса не инициализированы, они имеют default(int)
значение 0
.
Когда вы сейчас звоните своему addMousePosition()
, вы всегда будете использовать 0
по умолчанию вместо реальных значений, которые вы сохранили в локальных int H
и int W
private void OnTimedMousePositionEvent(Object source, ElapsedEventArgs e)
{
record.addMousePosition(W,H,MousePosition.X,MousePosition.Y);
}
public static void addMousePosition(int w, int h, int x, int y)
{
if (x > w/2 && y > h/2)
mousePositions.Add(1);
else if (x > w/2 && y <= h/2)
mousePositions.Add(2);
else if (x <= w/2 && y <= h/2)
mousePositions.Add(3);
else if (x <= w/2 && y > h/2)
mousePositions.Add(4);
}
и т. Д.Ваш код будет Add(1)
большую часть времени.Только в верхнем левом углу экрана вы должны попасть в ветку Add(3)
.
Таким образом, удаление int
в передней части локальных W
и H
решит проблему.
public void setScreenSize()
{
W = Screen.PrimaryScreen.Bounds.Width;
H = Screen.PrimaryScreen.Bounds.Height;
Console.WriteLine("Height is: " + H + "width is: " + W);
}
Для уточнения рекомендую использовать this.
:
public void setScreenSize()
{
this.W = Screen.PrimaryScreen.Bounds.Width;
this.H = Screen.PrimaryScreen.Bounds.Height;
Console.WriteLine("Height is: " + this.H + "width is: " + this.W);
}
Узел сайта:
упсправы!Интересно, почему он не жаловался на это
Я также думал, что VS2017 даст подсказку об этом, но это не так.Resharper предоставляет подсказку:
Локальная переменная H
скрывает поле int Recording.H