Home > Software engineering >  c# windows forms application Pinning start location when button clicked
c# windows forms application Pinning start location when button clicked

Time:12-09

I have made a new windows forms application, and I'm trying to use a button to allow the user to save the application startup location when the button is clicked. I have tried to look the problem up, but I can't find anything about using a button to do it.

Here is what I have found so far which saves the location on the screen when the form is closed, I just don't know how to make it only save the location when a button is clicked:

public static void GeometryFromString(string thisWindowGeometry, Form formIn)
{
    if (string.IsNullOrEmpty(thisWindowGeometry) == true)
    {
        return;
    }
    string[] numbers = thisWindowGeometry.Split('|');
    string windowString = numbers[4];
    if (windowString == "Normal")
    {
        Point windowPoint = new Point(int.Parse(numbers[0]),
            int.Parse(numbers[1]));
        Size windowSize = new Size(int.Parse(numbers[2]),
            int.Parse(numbers[3]));

        bool locOkay = GeometryIsBizarreLocation(windowPoint, windowSize);
        bool sizeOkay = GeometryIsBizarreSize(windowSize);

        if (locOkay == true && sizeOkay == true)
        {
            formIn.Location = windowPoint;
            formIn.Size = windowSize;
            formIn.StartPosition = FormStartPosition.Manual;
            formIn.WindowState = FormWindowState.Normal;
        }
        else if (sizeOkay == true)
        {
            formIn.Size = windowSize;
        }
    }
    else if (windowString == "Maximized")
    {
        formIn.Location = new Point(100, 100);
        formIn.StartPosition = FormStartPosition.Manual;
        formIn.WindowState = FormWindowState.Maximized;
    }
}
private static bool GeometryIsBizarreLocation(Point loc, Size size)
{
    bool locOkay;
    if (loc.X < 0 || loc.Y < 0)
    {
        locOkay = false;
    }
    else if (loc.X   size.Width > Screen.PrimaryScreen.WorkingArea.Width)
    {
        locOkay = false;
    }
    else if (loc.Y   size.Height > Screen.PrimaryScreen.WorkingArea.Height)
    {
        locOkay = false;
    }
    else
    {
        locOkay = true;
    }
    return locOkay;
}
private static bool GeometryIsBizarreSize(Size size)
{
    return (size.Height <= Screen.PrimaryScreen.WorkingArea.Height &&
        size.Width <= Screen.PrimaryScreen.WorkingArea.Width);
}
public static string GeometryToString(Form mainForm)
{
    return mainForm.Location.X.ToString()   "|"  
        mainForm.Location.Y.ToString()   "|"  
        mainForm.Size.Width.ToString()   "|"  
        mainForm.Size.Height.ToString()   "|"  
        mainForm.WindowState.ToString();
}

CodePudding user response:

Here's one of many ways to implement a button to save the Location (and optionally Size).

screenshot


First, Create a Settings resource if one doesn't already exist. Right-click on the Project and select Properties.

project

Choose the Settings tab and click the link to create the resource.

link

Make entries for Size and Location:

entries


Add a Click handler for your Save button:

public MainForm()
{
    InitializeComponent();
    buttonSaveSizeAndPosition.Click  = saveSizeAndPosition;
}

private async void saveSizeAndPosition(object sender, EventArgs e)
{
    Properties.Settings.Default.Location = Location;
    Properties.Settings.Default.Size = Size;
    Properties.Settings.Default.Save();
    var textB4 = Text;
    Text = $"Location = {Location} Size = {Size}";
    await Task.Delay(1000);
    Text = textB4;
}

Then, when you load the main form check to see whether the Size has moved off of the default value before reloading these properties:

protected override void onl oad(EventArgs e)
{
    base.OnLoad(e);
    if (!Properties.Settings.Default.Size.Equals(new Size()))
    {
        Location = Properties.Settings.Default.Location;
        Size = Properties.Settings.Default.Size;
    }
}
  • Related