Hi all,

I was wondering how I would use a single text box for multiple things

eg. In one text box I would type 'createfile file.txt'

or something like 'stopprocess process' etc.

How would I do that?

Thanks

This sounds like a horrible idea but to answer your question:

private void button5_Click(object sender, EventArgs e)
    {
      string[] args;

      if (string.IsNullOrEmpty(textBox1.Text))
        return;
      else
        args = textBox1.Text.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

      string cmd = args[0].ToLower();
      switch (cmd)
      {
        case "createfile":
          if (args.Length == 2)
            System.IO.File.WriteAllBytes(args[1], new byte[0]);
          else
            MessageBox.Show("Please supply a file name");
          break;
        case "stopprocess":
          if (args.Length == 2)
          {
            System.Diagnostics.Process[] procs = System.Diagnostics.Process.GetProcessesByName(args[1]);
            foreach (System.Diagnostics.Process p in procs)
              p.Kill();
          }
          else
          {
            MessageBox.Show("Please supply a process name");
          }
          break;
        default:
          MessageBox.Show(string.Format("Unknown command {0}", cmd));
          break;
      }

    }

Could you write this with instead of casing but with trimming?

Thank you

How can I trim a string with another string?

ie

string msg;
string mmsg;

if(msg.StartsWith("g_start") == true){
                    string trimString = "'g_start";
                    mmsg = msg.TrimStart(trimString);
                    MessageBox.Show(mmsg);}

Something like that, yakno? Or can I trim x ammount of characters from a string

ie

msg.TrimStart(5); //Trims 5 characters off the beginning of msg

Thanks

Edited 3 Years Ago by mike_2000_17: Fixed formatting

Why bother trimming it? You want to split on a space like I did in the first example. You can use string.Replace() and substitute the command with string.empty effectively removing it. This is a roundabout way to accomplish this task though. What are you trying to do?

Basically what you did, but in my own simplified little way.

Basically I have where it sees that I typed 'g_start', trims away the 'g_start ' and runs the line to start what was behind that command.

ie

Control > g_start calc

Program > Sees g_start, runs if statement. Trims away g_start , puts the posterior of the command (calc) into mmsg, and runs System.Diagnostics.Process.Start(mmsg);

There you have it.

So has your question been answered or do you still need some assistance? If it has been answered please mark this thread as solved, if not then please clarify what you are looking for and we'll go from there.

Either way -- Good luck!

Thanks for devoting your help towards me.

My current problem -

            if(msg.StartsWith("c_start") == true){
                msg.Replace("c_start ",string.Empty);
                mmsg = msg.Trim();
                MessageBox.Show(mmsg);
            }

It doesn't even recognize c_start.

Any ideas? and maybe a fix too?

Edited 3 Years Ago by mike_2000_17: Fixed formatting

In your first example you used "g_start" and in this example you used "c_start". Is that possibly your issue? Either way you should create "delegate" methods to pass the commands down.

private void button5_Click(object sender, EventArgs e)
    {
      //Now we have `g_start createfile c:\file.txt`
      ProcessCommand(textBox1.Text);
    }

    private void ProcessCommand(string cmd)
    {
      //for this example we `g_start createfile c:\file.txt`
      if (string.IsNullOrEmpty(cmd))
        return;
      string[] split = cmd.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
      if (split.Length == 0)
        return; //they didnt have any following arguments so its not valid
      string switcher = split[0].Trim().ToLower();
      switch (switcher)
      {
        case "g_start":
          {
            List<string> lst = split.ToList();
            lst.RemoveAt(0); //remove g_start, the first element in the array
            ProcessGStart(lst.ToArray());
          }
          break;
        case "g_something":
          {
            List<string> lst = split.ToList();
            lst.RemoveAt(0); //remove g_something, the first element in the array
            ProcessGSomething(lst.ToArray());
          }
          break;
        default:
          return;
          //break;
      }
    }

    private void ProcessGStart(string[] cmd)
    {
      //At this point we have `createfile c:\file.txt`

      string switcher = cmd[0].ToLower().Trim();
      switch (switcher)
      {
        case "createfile":
          if (cmd.Length == 2)
            System.IO.File.WriteAllBytes(cmd[1], new byte[0]);
          else
            MessageBox.Show("Please supply a file name");
          break;
        case "stopprocess":
          if (cmd.Length == 2)
          {
            System.Diagnostics.Process[] procs = System.Diagnostics.Process.GetProcessesByName(cmd[1]);
            foreach (System.Diagnostics.Process p in procs)
              p.Kill();
          }
          else
          {
            MessageBox.Show("Please supply a process name");
          }
          break;
        default:
          MessageBox.Show(string.Format("Unknown command {0}", cmd));
          break;
      }
    }

    private void ProcessGSomething(string[] cmd)
    {
      //This is just to show how you can delegate different methods based on the command prefix
      throw new NotImplementedException();
    }
This question has already been answered. Start a new discussion instead.