2010-12-17 17 views
7

क्या कोई तरीका है कि मैं क्षैतिज स्क्रॉल बार को किसी सूचीदृश्य में दिखने से रोक सकता हूं? मैं आवश्यक होने पर लंबवत स्क्रॉल बार दिखाना चाहता हूं लेकिन मैं क्षैतिज स्क्रॉल बार कभी नहीं दिखाना चाहता हूं।सी # ListView क्षैतिज स्क्रॉलबार अक्षम करें

मुझे लगता है कि यह WndProc के साथ कुछ करने के लिए होगा?

धन्यवाद

उत्तर

4

आप कुछ इस तरह की कोशिश कर सकते हैं, मैं एक बार एक परियोजना में इस्तेमाल और यह काम किया:

[DllImport ("user32")] 
private static extern long ShowScrollBar (long hwnd , long wBar, long bShow); 
long SB_HORZ = 0; 
long SB_VERT = 1; 
long SB_BOTH = 3; 

private void HideHorizontalScrollBar() 
{ 
    ShowScrollBar(listView1.Handle.ToInt64(), SB_HORZ, 0); 
} 

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

+1

हाय आप कृपया इस व्याख्या कर सकते हैं, या आप मुझे बता सकते हैं कैसे मैं इन सभी प्रत्यक्ष खिड़कियों पर पढ़ सकते हैं एपीआई – swordfish

+1

'लंबे hwnd' आप पी/आह्वान करने के लिए पहले पैरामीटर के रूप' इस्तेमाल कर सकते हैं IntPtr hwnd' के बजाय कॉल तरीका। –

+0

दूसरा, पी/Invokes के लिए, alsways pinvoke देखो। :) http://www.pinvoke.net/default.aspx/user32/ShowScrollBar.html हस्ताक्षर देता है [DllImport ("user32.dll")] [वापसी: मार्शलएएस (UnmanagedType.Bool)] सार्वजनिक स्थैतिक बाहरी बूल ShowScrollBar (IntPtr एचडब्ल्यूएनडी, int wBar, [मार्शलएएस (UnmanagedType.Bool)] बूल bShow); केवल समस्या (मुझे लगता है) IntPtr है जिसे यूवे ने पहले ही उल्लेख किया है। –

4

@ बेनियोबी का जवाब असुरक्षित है, क्योंकि यह ढेर असंतुलन है। आप DllImport के लिए बजाय निम्नलिखित कोड का उपयोग करना चाहिए:

[System.Runtime.InteropServices.DllImport("user32", CallingConvention=System.Runtime.InteropServices.CallingConvention.Winapi)] 
     [return: System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)] 
     private static extern bool ShowScrollBar(IntPtr hwnd, int wBar, [System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)] bool bShow); 

एंड्रियास Reiff फिर से देखने के बाद के ऊपर अपने टिप्पणी में यह शामिल किया गया है, इसलिए मैं यहाँ लगता है कि यह सब अच्छी तरह से स्वरूपित है।

6

निचले स्क्रॉल बार को खत्म करने और लंबवत दिखने का एक बहुत ही आसान तरीका है। यह सुनिश्चित करें कि शीर्ष लेख बनाने के होते हैं और कोई शीर्ष लेख अगर पंक्तियों listview.Width - 4 की चौड़ाई कर रहे हैं और दिखाते हैं कि यदि ऊर्ध्वाधर स्क्रॉल पट्टी है तो listview.Width - Scrollbar.Width - 4;

निम्नलिखित कोड demostrates कैसे:

lv.Columns[0].Width = Width - 4 - SystemInformation.VerticalScrollBarWidth; 
+0

यह वास्तव में चयनित उत्तर और वास्तव में समस्या का मूल कारण से अधिक क्लीनर दृष्टिकोण है। ListView के कॉलम को छोटा होना चाहिए। उस संकेत के लिए धन्यवाद, यह मेरे लिए काम किया। – Tobias

+0

यह आसान है और यह काम करता है! अच्छा काम! – NothinRandom

+0

मुझे नहीं लगता कि यह चेक बॉक्स पंक्तियों का उपयोग करने पर काम करेगा।साथ ही मुझे नहीं लगता कि निश्चित मान अच्छे हैं क्योंकि अन्य विंडोज डिज़ाइन शायद विभिन्न आकारों का उपयोग करेंगे। और आखिरी लेकिन कम से कम यह एक क्लीनर दृष्टिकोण नहीं है। यदि आप स्क्रॉल बार नहीं चाहते हैं तो आपको इसे छिपाना/अक्षम करना चाहिए और कुछ और समायोजित नहीं करना चाहिए, इसलिए यह नहीं दिखाया जाएगा। मुझे पी/समाधान समाधान पसंद नहीं है लेकिन कॉलम चौड़ाई समायोजन की तुलना में यह अभी भी एक बेहतर दृष्टिकोण है। –

1

सबसे अच्छा समाधान How to hide the vertical scroll bar in a .NET ListView Control in Details mode

यह पूरी तरह से काम करता है और आप स्तंभ चौड़ाई समायोजन की तरह कुछ चाल की जरूरत नहीं है: स्वीकार किए जाते हैं जवाब यह है कि यहां दिया गया था है। इसके अलावा आप नियंत्रण बनाते समय स्क्रॉलबार को अक्षम करते हैं।

दोष यह है कि आपको अपनी खुद की सूची दृश्य कक्षा बनाना है जो से WndProc ओवरराइड करने के लिए प्राप्त होता है। लेकिन यह जाने का रास्ता है।

क्षैतिज स्क्रॉल बार को अक्षम करने के लिए, (जो लिंक किए गए उत्तर में उपयोग किया गया था) के बजाय WS_HSCROLL का उपयोग करना याद रखें। WS_HSCROLL का मान 0x00100000 है।

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