Метод страно себя ведет если создавать его в другом класе и cделать cсылку на него

155
20 января 2019, 06:50

В первом случае метод работает правильно, курсор после открытия формы перемещается на старт.

В этом коде изменяется только метод Start_Game()

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp3
{
    public partial class LevelOneLevelOne : Form
    {
        public LevelOneLevelOne()
        {
            InitializeComponent();
        }
//Изменил только вот этот метод
        private void Start_Game()
        {
            Point point;
            point = Start111.Location;
            point.Offset(Start111.Width / 2, Start111.Height / 2);
            Cursor.Position = PointToScreen (point);
        }
        private void Finish_Game()
        {
            DialogResult DialogResult = MessageBox.Show("Котенок умер, восскресить его?", "Сообщение", MessageBoxButtons.YesNo);
            if (DialogResult == System.Windows.Forms.DialogResult.Yes)
            {
                Start_Game();
            }
            else if (DialogResult == System.Windows.Forms.DialogResult.No)
            {
                this.Close();
            }
        }
        private void LevelOneLevelOne_Shown(object sender, EventArgs e)
        {
            Start_Game();
        }
        private void finish_MouseEnter(object sender, EventArgs e)
        {
            DialogResult = System.Windows.Forms.DialogResult.OK;
        }
        private void Wall3_MouseEnter(object sender, EventArgs e)
        {
            Finish_Game();
        }
    }
}

Курсор благополучно оказался на старте

А во втором случает когда я делаю ссылку на класс, он работает странно, я всего лишь этот метод написал в другом классе, что бы удобно было использовать. Курсор после инициализации формы запускает метод, который перемещает курсор на старт, но он появляется не на старте, а где-то в левом верхнем углу, и после каждого вызова метода он чуть чуть съезжает по диагонале в правый нижний угол, а при десятом вызове метода он снова возвращается в левый верхний угол на исходное положение и все по кругу.

Код переместил в класс, а тут сделал ссылку на класс и вызвал метод

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp3
{
    public partial class LevelOneLevelOne : Form
    {
        public LevelOneLevelOne()
        {
            InitializeComponent();
        }
//изменил только вот этот метод
        private void Start_Game()
        {
            StartClass SC = new StartClass();
            SC.StartM();
        }
        private void Finish_Game()
        {
            DialogResult DialogResult = MessageBox.Show("Котенок умер, восскресить его?", "Сообщение", MessageBoxButtons.YesNo);
            if (DialogResult == System.Windows.Forms.DialogResult.Yes)
            {
                Start_Game();
            }
            else if (DialogResult == System.Windows.Forms.DialogResult.No)
            {
                this.Close();
            }
        }
        private void LevelOneLevelOne_Shown(object sender, EventArgs e)
        {
            Start_Game();
        }
        private void finish_MouseEnter(object sender, EventArgs e)
        {
            DialogResult = System.Windows.Forms.DialogResult.OK;
        }
        private void Wall3_MouseEnter(object sender, EventArgs e)
        {
            Finish_Game();
        }
    }
}

В этом коде написан класс для перемещение курсора на старт

using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApp3 
{
    class StartClass : LevelOneLevelOne
    {
        public void StartM()
        {
            Point point;
            point = Start111.Location;
            point.Offset(Start111.Width / 2, Start111.Height / 2);
            Cursor.Position = PointToScreen(point);
        }
    }
}

Положение курсора при первом и 10 и 20 и т.д. вызове метода

Положение курсора при втором и 11 и 21 и т.д. вызове метода

Положение курсора при третьем и 12 и 22 и т.д. вызове метода

Объясните мне пожалуйста почему так происходит.

READ ALSO
Получение видео с web-камеры

Получение видео с web-камеры

Как обращаться с web-камерой есть специальная библиотека, с этим проблем нетНо есть проблема, если камеру воткнуть в карту выдеозахвата, она...

161
Как правильно, в WPF в рамках паттерна MVVM подключить Progressbar

Как правильно, в WPF в рамках паттерна MVVM подключить Progressbar

Собираюсь в своем приложении сделать индикатор процесса, и сейчас встал вопрос, а как правильно подключить Прогрессбар, чтобы он вписался...

165
Как добавлять в базу данных данные асинхронно

Как добавлять в базу данных данные асинхронно

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

170
Помогите, с заданием

Помогите, с заданием

Нужно, чтобы в кейсах можно было взаимодействовать в имеющимися у меня методамиТо есть, когда выбираешь, например, увеличить или уменьшить...

182