2010-12-27 8 views
6

मैं एक किताब जोDialogResult WPF

उपयोगकर्ता एक बटन क्लिक करता है के बाद हाथ से DialogResult स्थापित करने के बजाय कहते हैं पढ़ रहा हूँ, आप एक बटन के रूप में स्वीकार बटन (के लिए IsDefault की स्थापना द्वारा निर्दिष्ट कर सकते हैं सच)। उस बटन पर क्लिक करने से विंडो को स्वचालित रूप से डायलॉग रीसेट को सही पर सेट किया जाता है। इसी प्रकार, आप एक बटन को रद्द करें बटन के रूप में निर्दिष्ट कर सकते हैं ( IsCancel को सत्य पर सेट करके), जिस स्थिति में क्लिक करने से डायलॉग रीसेट को रद्द करने के लिए सेट किया जाएगा।

private void BtnShowDialogStatus_Click(object sender, RoutedEventArgs e) 
{ 
    MessageBox.Show(new NewWindow().ShowDialog().ToString()); 
} 

और यह संवाद बॉक्स जो मैं क्लिक करें घटना पर खोलने रहा है:

<Window x:Class="WpfApplicationWPF.NewWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="NewWindow" Height="300" Width="300"> 
    <StackPanel> 
     <Button Name="BtnDEfault" IsDefault="True" Click="BtnDEfault_Click">DEFAULT BUTTON</Button> 
     <Button Name="BtnCancel" IsCancel="True" Click="BtnCancel_Click">CANCEL BUTTON</Button> 
    </StackPanel> 
</Window> 

<Window x:Class="WpfApplicationWPF.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Width="400" Height="400"> 
    <StackPanel> 

     <Button Name="BtnShowDialogStatus" Click="BtnShowDialogStatus_Click">DIALOG RESULT</Button> 
    </StackPanel> 
</Window> 

क्लिक करें घटना के लिए कोड:

यह MainWindow है

यह इसके लिए कोड है:

private void BtnDEfault_Click(object sender, RoutedEventArgs e) 
{ 
    this.Close(); 
} 

private void BtnCancel_Click(object sender, RoutedEventArgs e) 
{ 
    this.Close(); 
} 

मैं इसे डायलॉग रेसल्ट को केवल झूठी के रूप में लौट सकता हूं, इससे कोई फर्क नहीं पड़ता कि मैं डिफ़ॉल्ट या रद्द बटन पर क्लिक करता हूं।

उत्तर

7

IsDefault संबंधों कुंजी दर्ज करने के लिए बटन में मदद करता है, ताकि कुंजी Enter दबा घटना क्लिक करें सक्रिय हो जाएगा। इसका मतलब यह नहीं है कि हाँ बटन DialogResult के लिए सच हो जाएगा।

links.It करने के लिए आप

http://blog.wpfwonderland.com/2010/03/22/getting-a-dialogresult-from-a-wpf-window/

http://www.wpftutorial.net/Dialogs.html

आशा है कि यह मदद करता है चीजों को साफ हो जाएगा के रूप में सच IsDefault की स्थापना करने के लिए मेरी समझ

+0

लेखक गलत था मुझे लगता है। उसे एक प्रतिक्रिया भेजेंगे। –

+1

पहला लिंक टूटा हुआ है :( – juagicre

5

बदलने के लिए

private void BtnDEfault_Click(object sender, RoutedEventArgs e) 
{ 
    DialogResult = true; 
    this.Close(); 
} 

private void BtnCancel_Click(object sender, RoutedEventArgs e) 
{ 
    DialogResult = false; 
    this.Close(); 
} 

आशा अपने कोड इस

+0

हाय, यू लेखक का words.He पढ़ फ्लॉप कहते हैं DialogResult स्वचालित रूप से सेट हो जाता है कि। –

+0

मैंने अभी इसका परीक्षण किया है, और संवाद परिणाम स्वचालित रूप से किसी भी बटन के लिए सेट नहीं होता है। हालांकि, अजीब बात यह है कि क्लिक किया गया है जब IsDefault के रूप में सेट बटन स्वचालित रूप से विंडो बंद नहीं करता है। इस्कैनेल के रूप में सेट बटन, हालांकि, करता है। कोई और अजीब व्यवहार देख रहा है? –

+1

मुझे थोड़ा सा स्पष्ट करना चाहिए। यदि आप किसी भी हैंडलर निर्दिष्ट नहीं करते हैं (या किसी हैंडलर में डायलॉग रेसल्ट मान निर्दिष्ट नहीं करते हैं), तो IsCancel सेट वाला बटन अभी भी विंडो बंद कर देगा। IsDefault के साथ सेट बटन नहीं होगा। लेकिन अगर आप दोनों ईवेंट हैंडलर में DialogResult सेट करते हैं, तो विंडो बंद हो जाएगी (और आपको इसकी आवश्यकता भी नहीं है। बंद करें() लाइन)। बहुत अजीब और बहुत असंगत। –

2

देखें ... और IsCancel झूठी के रूप में केवल आपको यह निर्दिष्ट करने में सक्षम बनाता है कि कौन सी घटना होनी चाहिए यानी विंडो इस्कैनेल के लिए 'एस्केप' कुंजी पर और आईएसडी के लिए एंटर कुंजी के लिए निकट घटना को आग लग जाएगी efault = सच।

आपको अपने बटन क्लिक/कमांड एक्शन हैंडलर से संवाद परिणाम सेट करने की आवश्यकता होगी।

1

नेट 5 का उपयोग करना यह शोडियलॉग विंडो खोलने के लिए आवश्यक सभी कोड लगता है, और इसे बंद करें।

खिड़की से आपने खोला है।

<Button Margin="10" IsDefault="True" Click="Ok_OnClick" >OK</Button> 
    <Button Margin="10" IsCancel="True">Cancel</Button> 

    private void Ok_OnClick(object sender, RoutedEventArgs e) 
    { 
     DialogResult = true; 
    } 

फ़ंक्शन से विंडो खोलने के लिए।

 var requester = new DeleteRequester();// a wpf window  
     var showDialog = requester.ShowDialog(); 
     if (showDialog != null && showDialog.Value) 

एकमात्र कारण यह शून्य के लिए चेक किया गया है, फिर से तेज से नीली नाग लाइन से छुटकारा पाना है।

ऐसा लगता है जब भी आप "DialogResult" बदलते हैं विंडो बंद होने जा रही है और मान वापस आ गया है। समझदारी की तरह, यदि आप नहीं किए गए थे तो आप मूल्य क्यों बदलेंगे।

खिड़की के साथ आप जो भी कर रहे हैं, उसके साथ आपको झूठी नतीजे वापस करने के लिए विंडो बंद करने की ज़रूरत है, या वास्तविक परिणाम के साथ विंडो को बंद करने के लिए संवाद को सही करने के लिए संवाद सेट करना होगा।

सरल और बुनियादी:

If(ItWorked){DialogResult = true;}// closes window returns true 

If(ItsJunk){Close();}// closes window returns false 
If(ItsJunk){DialogResult = false;}//closes window returns false