Модален диалог
1 отговора
67 прегледа
Модален диалог
Някой може ли да ми помогне да разбера как се осъществява модален диалог във Visual C++ .NET. Проблемът е следният. Най-напред искам да отворя текстови файл и да присвоя данните съдържащи се в него в два масива, например чрез:
private: System::Void button1_Click(System::Object * sender, System::EventArgs * e)
{
listBox1->Items->Clear();
try
{
OpenFileDialog *fileChooser = new OpenFileDialog();
Windows::Forms::DialogResult result = fileChooser->ShowDialog();
// name of file containing data
String *fileName;
// exit event handler if user clicked Cancel
if ( result == DialogResult::Cancel )
return;
// get specified file name
fileName = fileChooser->FileName;
// show error if user specifies invalid data
if ( ( fileName->Equals( S"" ) ) )
MessageBox::Show( S"Invalid File Name", S"Error", MessageBoxButtons::OK, MessageBoxIcon::Error );
else
{
String* textFile = String::Concat( fileName );
}
StreamReader *reader = new StreamReader(fileName);
do
{
listBox1->Items->Add(reader->ReadLine());
}
while(reader->Peek() != -1);
}
catch(FileNotFoundException *ex)
{
listBox1->Items->Add(ex);
}
catch (System::Exception *e)
{
listBox1->Items->Add(e);
}
}
Едва след като изградя двата масива искам да извикам функция, която да представи данните графично върху формата, например така:
protected:
void OnPaint( PaintEventArgs *paintEvent )
{
__super::OnPaint( paintEvent ); // call base OnPaint method
// get graphics object
Graphics *graphicsObject = paintEvent->Graphics;
SolidBrush *brush = new SolidBrush( Color::Blue );
Pen *pen = new Pen( Color::Black );
for ( int count = 1; count <= 100; count++ )
{
graphicsObject->DrawEllipse( pen, count * 5, Math::Sin( count )*100, 7, 7 );
}
}
Тъй като бутоните очевидно се създава с помощта на същия този метод OnPaint, двете горенаписани функции се изпълняват едновременно. На мен ми е нужно обаче те да се извършат последователно. Много благодаря предварително, ако някой може да отдели малко време да ми обясни как става това във VC++.NET.
private: System::Void button1_Click(System::Object * sender, System::EventArgs * e)
{
listBox1->Items->Clear();
try
{
OpenFileDialog *fileChooser = new OpenFileDialog();
Windows::Forms::DialogResult result = fileChooser->ShowDialog();
// name of file containing data
String *fileName;
// exit event handler if user clicked Cancel
if ( result == DialogResult::Cancel )
return;
// get specified file name
fileName = fileChooser->FileName;
// show error if user specifies invalid data
if ( ( fileName->Equals( S"" ) ) )
MessageBox::Show( S"Invalid File Name", S"Error", MessageBoxButtons::OK, MessageBoxIcon::Error );
else
{
String* textFile = String::Concat( fileName );
}
StreamReader *reader = new StreamReader(fileName);
do
{
listBox1->Items->Add(reader->ReadLine());
}
while(reader->Peek() != -1);
}
catch(FileNotFoundException *ex)
{
listBox1->Items->Add(ex);
}
catch (System::Exception *e)
{
listBox1->Items->Add(e);
}
}
Едва след като изградя двата масива искам да извикам функция, която да представи данните графично върху формата, например така:
protected:
void OnPaint( PaintEventArgs *paintEvent )
{
__super::OnPaint( paintEvent ); // call base OnPaint method
// get graphics object
Graphics *graphicsObject = paintEvent->Graphics;
SolidBrush *brush = new SolidBrush( Color::Blue );
Pen *pen = new Pen( Color::Black );
for ( int count = 1; count <= 100; count++ )
{
graphicsObject->DrawEllipse( pen, count * 5, Math::Sin( count )*100, 7, 7 );
}
}
Тъй като бутоните очевидно се създава с помощта на същия този метод OnPaint, двете горенаписани функции се изпълняват едновременно. На мен ми е нужно обаче те да се извършат последователно. Много благодаря предварително, ако някой може да отдели малко време да ми обясни как става това във VC++.NET.