c# - WinForms AcceptButton काम नहीं कर रहा है?




modal-dialog (5)

मुझे AcceptButton काम नहीं कर रहा था और डायलॉग रिसेट सुझाव फिक्स का हिस्सा था, जबकि मेरे पास 2 अन्य चीजें थीं जिन्हें बदलने की जरूरत थी:

  1. मेरा बटन दिखाई नहीं दे रहा था - जानबूझकर क्योंकि मैं "डिंग" को रोकना चाहता था जब बारकोड स्कैन करके कैरिज रिटर्न "दबाया गया" था।
  2. कंटेनर जिसमें बटन अंदर था, एक फर्क पड़ता था। मुझे इसे एक ही कंटेनर में रखना था, मेरे मामले में एक फॉर्म। पैनेल, टेक्स्टबॉक्स के रूप में जो इसे एक्सेस करने का प्रयास कर रहा था। मुझे यकीन नहीं है कि इससे कोई फर्क क्यों पड़ेगा, लेकिन ऐसा हुआ।

मुझे उम्मीद है इससे किसी को सहायता मिलेगी।

ठीक है, यह मुझे परेशान कर रहा है, और मैं सिर्फ यह नहीं समझ सकता कि क्या गलत है ...

मैंने दो रूप बनाए हैं। पहले फॉर्म में बस एक साधारण बटन है, जो दूसरे को एक संवाद के रूप में खोलता है:

using (Form2 f = new Form2())
{
    if (f.ShowDialog() != DialogResult.OK)
        MessageBox.Show("Not OK");
    else
        MessageBox.Show("OK");
}

दूसरा, जो कि फॉर्म 2 है, पर दो बटन हैं। मैंने जो कुछ किया है, वह फॉर्म AcceptButton को एक सेट करना है, और दूसरे को रद्द करें बटन। मेरे सिर में यह सब कुछ है जो इस काम को करने के लिए जरूरी है। लेकिन जब मैं इसे चलाता हूं, तो मैं उस बटन पर क्लिक करता हूं जो फॉर्म 2 खोलता है। अब मैं CancelButton के रूप में एक सेट पर क्लिक कर सकता हूं, और मुझे "ठीक नहीं है" संदेश बॉक्स मिलता है। लेकिन जब मैं एक सेट पर AcceptButton के रूप में क्लिक करता हूं, कुछ नहीं होता है? फॉर्म 2 का प्रारंभिक कॉम्पोनेंट कोड इस तरह दिखता है:

private void InitializeComponent()
{
    this.button1 = new System.Windows.Forms.Button();
    this.button2 = new System.Windows.Forms.Button();
    this.SuspendLayout();
    // 
    // button1
    // 
    this.button1.Location = new System.Drawing.Point(211, 13);
    this.button1.Name = "button1";
    this.button1.Size = new System.Drawing.Size(75, 23);
    this.button1.TabIndex = 0;
    this.button1.Text = "button1";
    this.button1.UseVisualStyleBackColor = true;
    // 
    // button2
    // 
    this.button2.DialogResult = System.Windows.Forms.DialogResult.Cancel;
    this.button2.Location = new System.Drawing.Point(130, 13);
    this.button2.Name = "button2";
    this.button2.Size = new System.Drawing.Size(75, 23);
    this.button2.TabIndex = 1;
    this.button2.Text = "button2";
    this.button2.UseVisualStyleBackColor = true;
    // 
    // Form2
    // 
    this.AcceptButton = this.button1;
    this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    this.CancelButton = this.button2;
    this.ClientSize = new System.Drawing.Size(298, 59);
    this.Controls.Add(this.button2);
    this.Controls.Add(this.button1);
    this.Name = "Form2";
    this.Text = "Form2";
    this.Load += new System.EventHandler(this.Form2_Load);
    this.ResumeLayout(false);
}

मैंने उन दो बटन जोड़ने से कुछ और नहीं किया है, और AcceptButton और CancelButton सेट करें। यह क्यों काम नहीं करता है?


DialogResult पर DialogResult सेट करने का प्रयास करें

this.button1.DialogResult = System.Windows.Forms.DialogResult.OK;

आपको फ़ॉर्म की KeyPreview प्रॉपर्टी को सही पर सेट करने की आवश्यकता है, डिफ़ॉल्ट मान गलत है। याद रखें कि अगर फोकस AcceptButton की बजाय किसी अन्य बटन पर सेट किया गया है तो एंटर कुंजी इस बटन को निष्पादित करेगी



जैसा कि दूसरों ने उल्लेख किया है, YouTube का VideoId तकनीकी रूप से एक GUID नहीं है क्योंकि यह स्वाभाविक रूप से अद्वितीय नहीं है।

Wikipedia अनुसार:

अद्वितीय कुंजियों की कुल संख्या 2 128 या 3.4 × 10 38 है । यह संख्या इतनी बड़ी है कि एक ही संख्या के बेतरतीब ढंग से दो बार उत्पन्न होने की संभावना नगण्य है।

YouTube की VideoId की विशिष्टता उनके जनरेटर एल्गोरिदम द्वारा बनाए रखी गई है।

आप या तो अपना खुद का एल्गोरिदम लिख सकते हैं, या आप किसी प्रकार के यादृच्छिक स्ट्रिंग जनरेटर का उपयोग कर सकते हैं और इसकी विशिष्टता को लागू करने के लिए SQL में UNIQUE CONSTRAINT बाधा का उपयोग कर सकते हैं।

सबसे पहले अपने डेटाबेस में एक UNIQUE CONSTRAINT बनाएं:

ALTER TABLE MyTable
ADD CONSTRAINT UniqueUrlId
UNIQUE (UrlId);

फिर, उदाहरण के लिए, रैंडम स्ट्रिंग उत्पन्न करें (फिलिप्रोप्सच के answer ):

string shortUrl = System.Web.Security.Membership.GeneratePassword(11, 0);

यदि उत्पन्न UrlId पर्याप्त रूप से यादृच्छिक है और पर्याप्त रूप से लंबा है तो आपको उस अपवाद का सामना शायद ही करना चाहिए जब SQL एक डुप्लिकेट UrlId सामना करता है। ऐसी घटना में, आप आसानी से अपने वेब ऐप में अपवाद को संभाल सकते हैं।







c# winforms modal-dialog