2009-05-31 6 views
5

मैं एक कस्टम संदेश बॉक्स बना रहा हूं जो आपको टेक्स्ट कॉपी करने देता है, लेकिन मैं चाहता हूं कि यह एक मानक संदेश बॉक्स की तरह दिखता हो, इसलिए मैं बटन टेक्स्ट को सिस्टम भाषा के अनुसार सेट करना चाहता हूं, क्योंकि संदेशबॉक्स क्लास करता है । क्या कोई जानता है कि उस पाठ को कैसे प्राप्त करें ("हां", "नहीं", "रद्द करें", आदि)?मैं संदेश बॉक्स बटन कैप्शन कैसे प्राप्त करूं?

+0

यदि आपको कोई समाधान नहीं मिला है, तो शायद आप क्लिपबोर्ड पर संदेश टेक्स्ट डाल सकते हैं और उपयोगकर्ता को सूचित कर सकते हैं कि संदेश क्लिपबोर्ड पर है। – Stormenet

+2

यदि मानक संदेशबॉक्स दिखाए जाने पर आप Ctrl + C दबाते हैं, तो यह डिफ़ॉल्ट रूप से टेक्स्ट को क्लिपबोर्ड पर कॉपी करेगा। –

+0

टिप के लिए धन्यवाद, लेकिन फिर भी मुझे बड़े संदेशों के लिए स्क्रॉल बार जैसे अधिक अनुकूलन की आवश्यकता है। – rodrigoq

उत्तर

6

स्नारफब्लैम लिंक के साथ आपके उत्तरों के लिए धन्यवाद, मैं बाकी को समझ सकता हूं।

class Program { 

[DllImport("user32.dll", CharSet = CharSet.Auto)] 
static extern int LoadString(IntPtr hInstance, uint uID, StringBuilder lpBuffer, int nBufferMax); 
[DllImport("kernel32")] 
static extern IntPtr LoadLibrary(string lpFileName); 

private const uint OK_CAPTION = 800; 
private const uint CANCEL_CAPTION = 801; 
private const uint ABORT_CAPTION = 802; 
private const uint RETRY_CAPTION = 803; 
private const uint IGNORE_CAPTION = 804; 
private const uint YES_CAPTION = 805; 
private const uint NO_CAPTION = 806; 
private const uint CLOSE_CAPTION = 807; 
private const uint HELP_CAPTION = 808; 
private const uint TRYAGAIN_CAPTION = 809; 
private const uint CONTINUE_CAPTION = 810; 

static void Main(string[] args) { 
    StringBuilder sb = new StringBuilder(256); 

    IntPtr user32 = LoadLibrary(Environment.SystemDirectory + "\\User32.dll"); 

    LoadString(user32, OK_CAPTION, sb, sb.Capacity); 
    string ok = sb.ToString(); 

    LoadString(user32, CANCEL_CAPTION, sb, sb.Capacity); 
    string cancel = sb.ToString(); 

    LoadString(user32, ABORT_CAPTION, sb, sb.Capacity); 
    string abort = sb.ToString(); 

    LoadString(user32, RETRY_CAPTION, sb, sb.Capacity); 
    string retry = sb.ToString(); 

    LoadString(user32, IGNORE_CAPTION, sb, sb.Capacity); 
    string ignore = sb.ToString(); 

    LoadString(user32, YES_CAPTION, sb, sb.Capacity); 
    string yes = sb.ToString(); 

    LoadString(user32, NO_CAPTION, sb, sb.Capacity); 
    string no = sb.ToString(); 

    LoadString(user32, CLOSE_CAPTION, sb, sb.Capacity); 
    string close = sb.ToString(); 

    LoadString(user32, HELP_CAPTION, sb, sb.Capacity); 
    string help = sb.ToString(); 

    LoadString(user32, TRYAGAIN_CAPTION, sb, sb.Capacity); 
    string tryAgain = sb.ToString(); 

    LoadString(user32, CONTINUE_CAPTION, sb, sb.Capacity); 
    string cont = sb.ToString(); 

} 
-2

बार जब आप उस संदेश टाइप किया है, तो आपके द्वारा लिखा जा सकता था "हाँ", "नहीं", "ठीक है", "अभी नहीं" ...

+3

मुझे पूरा यकीन है कि ओपी सिस्टम से टेक्स्ट लेना चाहता है ताकि यह सही भाषा (सिस्टम लोकेल) –

+0

बिल्कुल सही एडम, मुझे यही चाहिए इसलिए मुझे सभी भाषाओं को निकालना नहीं है – rodrigoq

0

आप खुला हो सकता है में System.Windows.Forms.dll Reflector और देखें कि यह बटन टेक्स्ट कैसे सेट कर रहा है।

+0

मैंने ऐसा किया, लेकिन संदेश बॉक्स कॉल user32.dll में एक फ़ंक्शन है, इसलिए पाठ निम्न स्तर पर प्राप्त होता है, मुझे यकीन है कि इसे प्राप्त करने के लिए एक एपीआई है। – rodrigoq

1

codeproject.com कि संदेश बॉक्स स्थानीयकरण करने के बारे में बात करती है पर एक लेख नहीं है - आप इस लिंक उपयोगी लग सकते ...

http://www.codeproject.com/KB/miscctrl/Localizing_MessageBox.aspx

आशा है कि यह मदद करता है :)

+0

धन्यवाद, मैं इसे इतने लंबे समय से ढूंढ रहा हूं! यह बहुत उपयोगी है – BornToCode

4

ये तार User32.dll लाइब्रेरी में संग्रहीत होने लगते हैं। शुद्ध बेसिक फ़ोरम पर, नीचे की तरफ this discussion में विवरण हैं।

+0

मुझे बहुत धन्यवाद, मुझे समाधान मिल सकता है, मैं कुछ मिनटों में कोड पोस्ट करूंगा। – rodrigoq