2011-09-27 11 views
13

संभव डुप्लिकेट:
C# Advanced Console I/Oसी # कंसोल एप्लिकेशन में टेक्स्ट संपादित करें?

वहाँ एक रास्ता एक सी # कंसोल अनुप्रयोग में पाठ संपादित करने के है? दूसरे शब्दों में, क्या कमांड लाइन पर प्री-डिफ़ाइंड टेक्स्ट रखना संभव है ताकि उपयोगकर्ता टेक्स्ट को संशोधित कर सके और फिर उसे ऐप पर सबमिट कर सके?

+4

मुझे विश्वास नहीं है कि मेरा प्रश्न प्रदान किए गए प्रश्न का डुप्लिकेट है। मेरी ज़रूरत बहुत अधिक विशिष्ट है और उस प्रश्न पर दिए गए उत्तर इस सवाल का जवाब नहीं देते हैं। कंसोल क्लास, जहां तक ​​मैं कह सकता हूं, कमांड लाइन पर संपादन योग्य टेक्स्ट रखने में सहायता करने के लिए कुछ भी नहीं है। – Chev

+1

कंसोल एप्लिकेशन में कोई कमांड लाइन नहीं है जबतक कि आप एक प्रोग्राम न करें। और यह कंसोल कक्षा के साथ किया जा सकता है। संपादित करें: cmd लाइन शेल है, जिसे आप कंसोल एप्लिकेशन शुरू करने के लिए उपयोग करते हैं। यह चल रहा है और आप कंसोल विंडो में सामान आउटपुट कर रहे हैं, आप शेल कमांड यानी कमांड लाइन का उपयोग नहीं कर रहे हैं। आप कुंजी (कुंजी) को दबाएंगे और कुंजी के आधार पर विशिष्ट क्रियाएं करेंगे (यानी बैकस्पेस दबाए जाने पर एक कर्सर को वापस ले जाएं)। –

+1

@ एलेक्स फोर्ड: "अधिक विशिष्ट" के बारे में - "मैं कैसे कर सकता हूं प्रिंट int "अधिक विशिष्ट है तो" मैं ऑब्जेक्ट कैसे प्रिंट करूं ", कोई फर्क नहीं पड़ता। – agibalov

उत्तर

11

एक बात जो मेरे दिमाग में आई है ... है किस्ट्रोक को अनुकरण करें। और एक सरल उदाहरण का उपयोग करते हुए SendKeys:

static void Main(string[] args) 
{ 
    Console.Write("Your editable text:"); 
    SendKeys.SendWait("hello"); //hello text will be editable :) 
    Console.ReadLine(); 
} 

नोट: यह केवल सक्रिय विंडो पर काम करता है।

+1

आपकी विधि मेरी तुलना में सरल है। ऐसा लगता है कि मुझे साइकिलों का आविष्कार करना पसंद है :)) – Vasya

+0

आपका कोड वाकई अच्छा है और आप साइकिल का आविष्कार नहीं कर रहे हैं क्योंकि मेरे सुझाए गए समाधान में System.Windows.Forms नामस्थान या PInvoke SendInput या कुछ परिचित का उपयोग करने की आवश्यकता है। मेरे द्वारा +1 :) – Reniuz

+0

धन्यवाद। यह अच्छा है कि हम दोनों एक-दूसरे के तरीकों पर विचार करते हैं। – Vasya

15

हां। आपको कंसोल की विधि SetCursorPosition का उपयोग करने की आवश्यकता है। उदाहरण:

Console.WriteLine("hello"); 
    Console.SetCursorPosition(4, 0); 
    Console.WriteLine("  "); 

यह नरक 'प्रदर्शित करेगा आप ReadLine विधि आप कंसोल में एन-प्रतीकों (डिफ़ॉल्ट स्ट्रिंग) संपादित करें और एक उपयोगकर्ता से लौटने स्ट्रिंग के लिए करते हैं, जिनमें से कस्टम प्राप्ति की जरूरत है। यह मेरा उदाहरण है:

static string ReadLine(string Default) 
{ 
    int pos = Console.CursorLeft; 
    Console.Write(Default); 
    ConsoleKeyInfo info; 
    List<char> chars = new List<char>(); 
    if (string.IsNullOrEmpty(Default) == false) { 
     chars.AddRange(Default.ToCharArray()); 
    } 

    while (true) 
    { 
     info = Console.ReadKey(true); 
     if (info.Key == ConsoleKey.Backspace && Console.CursorLeft > pos) 
     { 
      chars.RemoveAt(chars.Count - 1); 
      Console.CursorLeft -= 1; 
      Console.Write(' '); 
      Console.CursorLeft -= 1; 

     } 
     else if (info.Key == ConsoleKey.Enter) { Console.Write(Environment.NewLine); break; } 
     //Here you need create own checking of symbols 
     else if (char.IsLetterOrDigit(info.KeyChar)) 
     { 
      Console.Write(info.KeyChar); 
      chars.Add(info.KeyChar); 
     } 
    } 
    return new string(chars.ToArray()); 
} 

यह विधि स्ट्रिंग डिफ़ॉल्ट प्रदर्शित करेगी। उम्मीद है कि मैं आपकी समस्या को सही समझता हूं (मुझे इसमें संदेह है)

+1

क्या आप थोड़ा सा स्पष्टीकरण दे सकते हैं? मुझे यकीन नहीं कि मैं समझा हूँ। मैंने इस कोड को एक नए कंसोल ऐप में रखा है और यह वास्तव में "नरक" प्रदर्शित करता है लेकिन यह मुझे कमांड लाइन पर उस पाठ को संपादित करने में कैसे मदद करता है? System12indows.Forms – Chev

+2

+1। उन लोगों के लिए बहुत उपयोगी है जिनके पास SendKeys के साथ समस्याएं हैं! –

+0

संदर्भ का संदर्भ नहीं देने के लिए –

संबंधित मुद्दे