Creating a find dialog

跟風遠走 提交于 2019-12-14 03:15:58

问题


So for this assignment in class I'm making a richtextbox editor in C# winforms, in this assignment I have to include a find function, but I can't seem to get the hang of it EDIT: it closes every time I click the search button, but that's not what I want, I want it to close when the user closes the actual dialog via the X in the top right, the search button should just highlight the found string by using the .Find() method

Here's my code up until now:

private void zoekenToolStripMenuItem_Click(object sender, EventArgs e)
{
    string searchValue = SearchDialog();
    Search(searchValue);
}

public string SearchDialog()
{
    Form findDialog = new Form();
    findDialog.Width = 500;
    findDialog.Height = 142;
    findDialog.Text = "Zoeken";
    Label textLabel = new Label() { Left = 10, Top = 20, Text = "Zoek naar:", Width = 100 };
    TextBox inputBox = new TextBox() { Left = 150, Top = 20, Width = 300};
    Button search = new Button() { Text = "Zoek", Left = 350, Width = 100, Top = 70 };
    search.Click += (object sender, EventArgs e) => { findDialog.Close(); };
    findDialog.Controls.Add(search);
    findDialog.Controls.Add(textLabel);
    findDialog.Controls.Add(inputBox);
    findDialog.ShowDialog();
    return (string)inputBox.Text;
}

void Search(string searchValue)
{
    rtxtInhoud.Find(searchValue);
}

The part: search.Click += (object sender, EventArgs e) => { findDialog.Close(); }; is what I'm really stuck on Thanks in advance

EDIT: here's something that I tried to do, which didn't work

public string SearchDialog()
{
   Form findDialog = new Form();
   findDialog.Width = 500;
   findDialog.Height = 142;
   findDialog.Text = "Zoeken";
   Label textLabel = new Label() { Left = 10, Top = 20, Text = "Zoek naar:", Width = 100 };
   TextBox inputBox = new TextBox() { Left = 150, Top = 20, Width = 300};
   Button search = new Button() { Text = "Zoek", Left = 350, Width = 100, Top = 70 };
   Button findNext = new Button() { Text = "Volgende", Left 250, Width = 100, Top = 70};
   search.Click += (object sender, EventArgs e) => { rtxtInhoud.Find(inputBox.Text); };
   findDialog.Controls.Add(search);
   findDialog.Controls.Add(textLabel);
   findDialog.Controls.Add(inputBox);
   findDialog.ShowDialog();
   return (string)inputBox.Text;
}

This waits for the Dialog to be closed before highlighting the found string. Which is NOT what I want, I want it to keep the Dialog open, but still highlight the text


回答1:


In your main form code, create a method that searches your text and highlights a found string. Then hook this method up to your search dialog button like the sample below. Also, I think you should call form.Show() instead of .ShowDialog(), so the other form can respond to input.

private void HighlightString(string stringToHighlight)
{
    // Code here to search your text and highlight a string.
}

private void SearchDialog()
{
    var findDialog = new Form {Width = 500, Height = 142, Text = "Zoeken"};
    var textLabel = new Label() {Left = 10, Top = 20, Text = "Zoek naar:", Width = 100};
    var inputBox = new TextBox() {Left = 150, Top = 20, Width = 300};
    var search = new Button() {Text = "Zoek", Left = 350, Width = 100, Top = 70};

    search.Click += (object sender, EventArgs e) => HighlightString(inputBox.Text);

    findDialog.Controls.Add(search);
    findDialog.Controls.Add(textLabel);
    findDialog.Controls.Add(inputBox);
    findDialog.Show();
}



回答2:


it closes every time I click the search button

Yes, that's because you added an event handler to the search button that closes the form:

search.Click += (object sender, EventArgs e) => { findDialog.Close(); };

but that's not what I want, I want it to [...]

Then write the code in that handler such that it does what you actually want it to do, instead of having it close the form.




回答3:


Use this code:

Application.Exit();


来源:https://stackoverflow.com/questions/29350837/creating-a-find-dialog

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!