Windows forms set saved groupbox location settings I have a Windows form that when a user moves some groupboxes around, before the application exits, it saves those X and Y coordinates into a MySQL database (with a bit of added text to identify which groupbox those settings belong to).  This all works fine.  When they log back into the application, I can pull those settings too.

Is this the most efficient way to accomplish parse &amp; apply saved settings from a string?

Here's the working function that's grabbing this text string and parses it:

private void apply_GUI_settings(string settings)
{
    // The string below, GUI_settings, will evaluate to: "[1:{X=7,Y=29}][2:{X=52,Y=433}]"
    string GUI_settings = settings;
    bool startFound = false;

    for (int c = 0; c &lt; GUI_settings.Length; c++)
    {
        switch (GUI_settings[c])
        {
            case '[':
                {
                    startFound = true;
                }
                break;
            case '1': // groupBox_AccountInfo.Location settings
            case '2': // groupBox_YourCharacters.Location settings
                {
                    string which_groupBox = GUI_settings[c].ToString();

                    if (startFound)
                    {
                        c++; // Iterate over the "1"
                        if (GUI_settings[c] == ':')
                        {
                            int n = 0;
                            string X = "";
                            string Y = "";

                            c += 4; // Iterate over the ":{X="
                            while (int.TryParse(GUI_settings[c].ToString(), out n))
                            {
                                c++;
                                X += n.ToString();
                            }
                            n = 0;

                            c += 3; // Iterate over the ",Y="
                            while (int.TryParse(GUI_settings[c].ToString(), out n))
                            {
                                c++;
                                Y += n.ToString();
                            }
                            n = 0;

                            if (which_groupBox == "1")
                                groupBox_AccountInfo.Location = new Point(int.Parse(X), int.Parse(Y));
                            else if (which_groupBox == "2")
                                groupBox_YourCharacters.Location = new Point(int.Parse(X), int.Parse(Y));

                            // Might as well cycle thru the rest of this string until ']'
                            while (GUI_settings[c] != ']')
                                c++;
                        }
                        else
                        {
                            MessageBox.Show("[ERROR:53928]");
                        }

                        startFound = false;
                    }
                    else
                    {
                        continue;
                    }
                }
                break;
        }
    }
}
Parsing the settings strings character by character is troublesome and can be hard to get it right.

It would be better to use a regex to match the string and extract the relevant parts using capture groups, for example:

\[(\d+):\{X=(\d+),Y=(\d+)\}\]




Debuggex Demo

I know too little of C# to give a sample implementation,
in case it helps, here it is in Java:

Pattern pattern = Pattern.compile("\\[(\\d+):\\{X=(\\d+),Y=(\\d+)\\}\\]");
String sample = "[1:{X=7,Y=29}][2:{X=52,Y=433}]";

Matcher matcher = pattern.matcher(sample);
while (matcher.find()) {
    int id = Integer.parseInt(matcher.group(1)),
    int x = Integer.parseInt(matcher.group(2)),
    int y = Integer.parseInt(matcher.group(3))
    // do what you need with id, x, y
}