C# Получение метода формы в пользовательском элементе управления C#

Я готовлюсь к тесту на 1-й год, и один из вопросов, о котором я знаю, это «Создайте пользовательский элемент управления с текстовым полем и кнопкой, а в форме создайте список». Хорошо. Теперь, что должно произойти, listBox перечисляет файлы из каталога. и textBox в User Control читает содержимое этого файла (.txt), и пользователю разрешено редактировать текстовое поле, а кнопка сохранения при нажатии должна перезаписывать исходный файл. Теперь я получил все чтение textBox с помощью StreamReader. Но я не могу получить кнопку в пользовательском элементе управления, чтобы получить путь к каталогу из ListBox.

Я должен перезаписать его с помощью StreamWriter, не могу использовать FileDialog. Он должен получить имя файла из ListBox, а затем оно загружается в путь каталога StreamWriter, который должен быть в btnSave, который находится в UserControl.

Я попытался сделать наоборот со свойством userControl userControl1.Text со свойством, которое я сделал. Затем попытался вызвать его как userControl из формы Form1.ItemsName, но это не сработало, поэтому я его очистил. Теперь у меня полный блок кодеров.

И я в тупике. Я пробовал все, чтобы получить btnSave в userControl, чтобы иметь возможность получать данные из формы listBox.SelectedItem.Text

Форма состоит из: listBox и UserControl

userControl состоит из: textBox и Button(btnSave).

Код формы 1:

    private void Form1_Load(object sender, EventArgs e)
    {
        // Reads the content from the file, 
        //listing other files in dir.

        StreamReader sr = new StreamReader(@"C:\C# Resources\Numbers.txt");
        string line = sr.ReadLine();

        try
        {
            // Adds content from Numbers.txt into the ListBox
            while (line != null)
            {
                this.listBox1.Items.Add(line);

                line = sr.ReadLine();
            }
            sr.Close();
        }
        catch (Exception Exc)
        {
            MessageBox.Show(Exc.Message.ToString());
        }
        finally
        {
            sr.Close();
        }
    }

    private void listBox1_Click(object sender, EventArgs e)
    {
        // Reads the name of the file in the list box, looking for the file in the dir.
        StreamReader file = new StreamReader(@"C:\C# Resources\" + listBox1.SelectedItem.ToString() + ".txt");
        string all = file.ReadToEnd();

        //Loads the ListBox_click file's content into the userControl textBox
        userControl11.Text = all.ToString();
    }
}

Код пользовательского контроля:

    // Creates method so the it can be loaded into form
    public string Text
    {
        set
        {
            textBox2.Text = value;
        }
        get
        {
            return textBox2.Text;
        }
    }

    //Has to overwrite/Save the content changed by the user in TextBox to the same 
    //directory/file it came from.

    private void btnSave_Click(object sender, EventArgs e)
    {
        StreamWriter sw = new StreamWriter(@"C:\C# Resources\" + /*Method to get the file path from the Form1 ListBox*/ + ".txt");
    }
}

person Kyle Nap    schedule 10.04.2013    source источник
comment
Попробуйте использовать класс FileDialog.   -  person Brian    schedule 10.04.2013


Ответы (2)


Поскольку это задание/работа над проектом, я просто укажу вам правильное направление.

  • Добавьте свойство в пользовательский элемент управления, например public string FileToWrite {get; set;}
  • Затем получите доступ к FileToWrite, который будет путем записи.


private void btnSave_Click(object sender, EventArgs e)
{
    StreamWriter sw = new StreamWriter(FileToWrite);
}
person Parimal Raj    schedule 10.04.2013
comment
Спасибо за помощь. Но это не проект и не связанная с ним классная работа. Это самообучение. Был разговор о подобном вопросе, поэтому я не обманываю или что-то в этом роде (не поможет мне в жизни, если я все равно буду обманывать в классе). Наши учебники никогда не фокусировались на пользовательском контроле. Проблема не в создании набора или получения. Проблема заключается в том, что мне нужно вызвать ListBox.SelectedItem.Text из формы в btnSave, который находится в userControl. Я знаю, как вызвать пользовательский элемент управления в форме «userControl1.‹что угодно›», но я не знаю, как вызвать из формы в userControl. Еще раз спасибо :) - person Kyle Nap; 11.04.2013

Вы не можете (или не должны) вызывать код формы с помощью пользовательского элемента управления. Вам нужен другой механизм, либо форма должна всегда сообщать элементу управления о выбранном элементе, либо пользовательский элемент управления должен запрашивать информацию.

И то и другое можно сделать с помощью событий

person James Barrass    schedule 15.04.2013