문제

대화 상자의 결과가 WPF에서 무효가 될 수 있다는 사실에 대한 좋은 설명을 생각할 수 있습니까? 이것은 항상 나를 당황하게 만들었습니다. Winforms에서 그것은 열거적인 유형이었고 그것은 나에게 훨씬 더 의미가있었습니다.

도움이 되었습니까?

해결책

내 생각에 이것은 대부분의 경우 필요하지 않기 때문에 일반화 된 전문 재 시도 또는 무시와 같은 옵션.

OK/취소 이상이 필요한 경우, 예를 들어 서면 답변과 함께 어떤 종류의 작업 대화 상자를 사용해야합니다. 이렇게하면 수십 년 전에 누군가가 생각한 몇 안되는 열거 가치에 국한되지 않으며, Dialogresult는 기본 사용에 긍정적/부정적이며 고급 요구에 특정한 자산을 구현할 수 있습니다. 따라서 True/False 만 필요하며 NULL은 창이 아직 닫히지 않았 음을 나타냅니다 (아직 값은 속성에 할당되지 않았습니다).

사용자가 대답 해야하는 질문 (예 : 항목 양식) 이상의 대화가있는 경우 일반적으로 OK/CANCEL을 사용하는 것이 좋으므로 더 많은 값이 필요하지 않습니다.

다른 팁

그만큼 DialogResult 속성은 Window 수업. 전부는 아닙니다 WindowS는 대화입니다. 따라서 속성이 모든 창과 관련이있는 것은 아닙니다. ㅏ Window 그것은 그것을 통해 보여졌습니다 Show() 보다는 ShowDialog() Will (아마도 어떤 이유로 든 설정하지 않는 한) DialogResult = null.

다음은 간단한 예를 보여줍니다.

Window1.xaml:

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <StackPanel>
        <Button Name="b1">Show</Button>
        <Button Name="b2">ShowDialog</Button>
    </StackPanel>
</Window>

Window1.xaml.cs:

using System.Windows;

namespace WpfApplication1
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
            b1.Click += new RoutedEventHandler(b1_Click);
            b2.Click += new RoutedEventHandler(b2_Click);
        }

        void b1_Click(object sender, RoutedEventArgs e)
        {
            var w = new Window();
            w.Closed += delegate
            {
                MessageBox.Show("" + w.DialogResult);
            };

            w.Show();
        }

        void b2_Click(object sender, RoutedEventArgs e)
        {
            var w = new Window();
            w.ShowDialog();
            MessageBox.Show("" + w.DialogResult);
        }
    }
}

창을 닫으면 대화 상자에 DialogResultfalse, 비 디 알로그에는 a null DialogResult.

에 따르면 MSDN 문서:

대화 상자가 표시되면 수락되거나 취소되지 않으면 Dialogresult가 NULL입니다.

그러나 대화 상자에 액세스하는 여러 스레드를 다루지 않으면 어떻게 될 수 있는지 잘 모르겠습니다.

문서는 다음과 같은 일 중 하나가 발생하면 거짓이라고 말합니다.

  • 프레스 살트+F4.
  • 닫기 버튼을 클릭합니다.
  • 시스템 메뉴에서 닫기를 선택합니다.

showdialog는 항상 참 또는 거짓을 반환합니다. Dialogresult는 대화 상자가 열릴 때만 Null 상태 만 가져갑니다. null에서 true 또는 false로 전환하면 대화 상자가 닫히고 원래 호출을 showdialog 반환합니다.

IMO 이것은 DialOgresult가 항상 사용되지 않기 때문입니다. Showdialog () 메소드에 의해 창을 호출하는 경우에만 Dialogresult를 설정할 수 있습니다. Show () 메소드로 호출하고 DialOgresult를 무엇이든 설정하려고하면 유효한 정보를 제공합니다. 그래서 그것이 그것이 무효가 될 수있는 이유라고 생각합니다. show () 메소드가있는 창을 호출 할 경우 showdialog ()를 사용하여 호출하면 널이됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top