Я открываю 5 разных форм через Form1, но не могу сохранить все позиции - PullRequest
0 голосов
/ 07 мая 2018

У меня есть проект, и я заблокирован.Я открываю различные формы в Form1, которые вы видите ниже в коде.Я сделал это с помощью «notifyIcon».Вместо того, чтобы открывать 5 разных форм, я привожу одну, меняя форму.У меня есть 5 форм на моем экране.Но моя проблема в том,Я могу сохранить расположение форм.Технически все они происходят из одной и той же формы, поэтому все они начинаются с одной и той же позиции.У вас есть рекомендации?

Редактировать: новая идея пришла в голову.но мне снова нужна твоя помощь.закрывая форму, я могу сохранить позицию формы в файл TxT и вручную запустить позиции с позициями из TxT при открытии форм.

private void Form1_Load(object sender, EventArgs e)
    {
        this.Hide();
        string dosyaYolu = @"D:\color\colors.txt";
        string[] satirlar = File.ReadAllLines(dosyaYolu);
    }

    private void tCKToolStripMenuItem_Click(object sender, EventArgs e)
    {
        string dosyaYolu = @"D:\color\colors.txt";
        string[] satirlar = File.ReadAllLines(dosyaYolu);

        string tckRenk = satirlar[0];
        Color tckColor = System.Drawing.ColorTranslator.FromHtml(tckRenk);

        Form2 tckForm = new Form2();
        tckForm.Opacity = .50;
        tckForm.TopMost = true;
        tckForm.BackColor = tckColor;
        tckForm.LabelText = "TCK";
        tckForm.Show();

    }

    private void aDAToolStripMenuItem_Click(object sender, EventArgs e)
    {
        string dosyaYolu = @"D:\color\colors.txt";
        string[] satirlar = File.ReadAllLines(dosyaYolu);

        string adaRenk = satirlar[1];
        Color adaColor = System.Drawing.ColorTranslator.FromHtml(adaRenk);

        Form2 adaForm = new Form2();
        adaForm.Opacity = .50;
        adaForm.TopMost = true;            
        adaForm.BackColor = adaColor;
        adaForm.LabelText = "ADA";
        adaForm.Show();

    }

Ответы [ 2 ]

0 голосов
/ 07 мая 2018
public static class extensions
{
    public static void SaveFormSizeAndLocation(this Form form)
    {
        try
        {
            using (RegistryKey key = Application.UserAppDataRegistry.CreateSubKey(form.Name))
            {
                if (key != null)
                {
                    if (form.WindowState == FormWindowState.Normal)
                    {
                        key.SetValue("Left", form.Left);
                        key.SetValue("Top", form.Top);
                        key.SetValue("Width", form.Width);
                        key.SetValue("Height", form.Height);
                    }
                    if (form.ShowInTaskbar)
                    {
                        string windowState = Enum.GetName(typeof(FormWindowState), form.WindowState);
                        key.SetValue("WindowState", form.WindowState);
                    }
                }
            }
        }
        catch
        {
            // Party on, Garth!
        }
    }
    public static void LoadFormSizeAndLocation(this Form form)
    {
        try
        {
            using (RegistryKey key = Application.UserAppDataRegistry.OpenSubKey(form.Name))
            {
                if (key != null)
                {
                    form.Left = (int)key.GetValue("Left", form.Left);
                    form.Top = (int)key.GetValue("Top", form.Top);
                    form.Width = (int)key.GetValue("Width", form.Width);
                    form.Height = (int)key.GetValue("Height", form.Height);
                    // Move window into visible screen bounds if outside screen bounds (prevent off-screen hidden windows)
                    Rectangle screenRect = SystemInformation.VirtualScreen;
                    if (form.Left < screenRect.Left)
                        form.Left = screenRect.Left;
                    if (form.Top < screenRect.Top)
                        form.Top = screenRect.Top;
                    if (form.Right > screenRect.Right)
                        form.Left = screenRect.Right - form.Width;
                    if (form.Bottom > screenRect.Bottom)
                        form.Top = screenRect.Bottom - form.Height;
                    if (form.ShowInTaskbar)
                    {
                        string windowState = Enum.GetName(typeof(FormWindowState), form.WindowState);
                        windowState = key.GetValue("WindowState", windowState).ToString();
                        form.WindowState = (FormWindowState)Enum.Parse(typeof(FormWindowState), windowState);
                    }
                }
            }
        }
        catch
        {
            // Party on, Wayne!
        }
    }
}

Используйте эти методы расширения и вызовите их в показанной форме, закрытии формы и событиях перемещения формы

для полного рабочего образца

  public partial class Form3 : Form
{
    private int count = 1;
    public Form3()
    {
        InitializeComponent();
    }

    private void Form2_Move(object sender, EventArgs e)
    {
        this.SaveFormSizeAndLocation();
    }

    protected override void OnShown(EventArgs e)
    {
        Text = Name;
        base.OnShown(e);
        this.LoadFormSizeAndLocation();
        this.Move += Form2_Move;
    }

    protected override void OnFormClosing(FormClosingEventArgs e)
    {
        base.OnFormClosing(e);
        this.SaveFormSizeAndLocation();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        var frm = new Form3();
        frm.Name = "inner" + count.ToString();
        frm.Show();
        count++;
    }
}
0 голосов
/ 07 мая 2018

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

    Form frm2 = new Form();
    frm2.StartPosition = FormStartPosition.Manual;
    frm2.Left = 500;
    frm2.Top = 500;
    frm2.Show();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...