Form1 및 Form2라고하는 2 개의 폼이 있습니다. Form1에 다음 코드가 있습니다.ComboBox를 업데이트/새로 고침 할 수 없습니다.
public void PrinterDD()
{
printer.Items.Clear();
string sprinters = @"filepath";
using (StreamReader reader = new StreamReader(sprinters))
try
{
while (!reader.EndOfStream)
{
string strPrnItem = reader.ReadLine();
MessageBox.Show(strPrnItem); //just here for troubleshooting purposes
printer.Items.Add(strPrnItem);
}
}
finally
{
reader.Close();
printer.Update();
printer.SelectedIndex = 0;
}
}
이 메서드는 Form1이로드 될 때 먼저 호출됩니다. 콤보 상자 ("프린터")가 올바르게 채워집니다.
private void accept_Click(object sender, EventArgs e)
{
this.AcceptButton = accept;
if (selectedprinters != null && selectedprinters.Items != null && selectedprinters.Items.Count > 0)
{
File.Delete(sprinters);
StreamWriter writer = new StreamWriter(sprinters);
try
{
foreach (object item in selectedprinters.Items)
{
writer.WriteLine(item.ToString());
}
}
finally
{
writer.Close();
Voicemails.PrinterDD();
}
}
this.Close();
}
라인 Voicemails.PrinterDD();
위를 Form1에서 메소드를 실행 : 형식 2에서
, 나는 파일을 작성하고 변경하는 방법이있다. 코드를 단계별로 실행할 때 모든 것이 잘 작동하는 것처럼 보입니다. 오류가 없으면 텍스트 파일에 새로운 값이 기록됩니다. 그러나 콤보 박스는 실제로 새 문자열을 표시하기 위해 업데이트/새로 고침하지 않습니다.
내가 뭘 잘못하고 있니?
EDIT. 나는 printer.Update();
대신 printer.Refresh();
을 Form1 코드에 시도했다.
ps. 내가 사용하고있는 파일은 텍스트 파일이므로 콤보 박스를 바인딩 할 수 없다고 생각합니다. 따라서 printer.DataSource = null
을 수행 한 다음 다시 바인딩하면 작동하지 않을 것이라고 생각합니다.
List<string> source = new List<string>();
while (!reader.EndOfStream)
source.Add(reader.ReadLine());
printer.DataSource = source;
printer.Refresh();
질문 제목 앞에 "C#"을 붙이지 마십시오. 그 태그가 무엇입니까? –
'음성 메일'개체 란 무엇입니까? 그것은 Form1의 인스턴스입니까? –
죄송합니다. Voicemails는 Form1의 실제 클래스 이름입니다. 방금 단순함으로 Form1을 말했어. – Kurt