问题描述
个人winform水平初学者,想同各位请教一下:使用richTextBox绑定vScrollBar,vScrollBar能根据内容自动变化,即是等于richTextBox自带的垂直滚动条功能。在这里特别说明一下,希望各位能施个手,发个完整的代码。
解决方案
解决方案二:
取得scrollbar的info,再设置另一个scrollbar的max和value.privatevoidrichTextBox1_VScroll(objectsender,EventArgse){SCROLLINFOscrollInfo=newSCROLLINFO();scrollInfo.cbSize=Marshal.SizeOf(scrollInfo);//SIF_RANGE=0x1,SIF_TRACKPOS=0x10,SIF_PAGE=0x2...scrollInfo.fMask=0x10|0x1|0x2|0x4|0x8;GetScrollInfo(richTextBox1.Handle,1,refscrollInfo);//nBar=1->VScrollbarvScrollBar1.Maximum=(scrollInfo.max-scrollInfo.nPage+1)*10;vScrollBar1.Value=scrollInfo.nPos*10;label2.Text="scrollbarmax="+vScrollBar1.Maximum+",currentpos="+vScrollBar1.Value;}[DllImport("user32")]privatestaticexternintGetScrollInfo(IntPtrhwnd,intnBar,refSCROLLINFOscrollInfo);
publicstructSCROLLINFO{publicintcbSize;publicintfMask;publicintmin;publicintmax;publicintnPage;publicintnPos;publicintnTrackPos;}
参考:C#:SynchronizeScrollPositionoftwoRichTextBoxes?HowtoknowifRichTextBoxverticalScrollbarreachedthemaxvalue?
解决方案三:
引用1楼findcaiyzh的回复:
取得scrollbar的info,再设置另一个scrollbar的max和value.privatevoidrichTextBox1_VScroll(objectsender,EventArgse){SCROLLINFOscrollInfo=newSCROLLINFO();scrollInfo.cbSize=Marshal.SizeOf(scrollInfo);//SIF_RANGE=0x1,SIF_TRACKPOS=0x10,SIF_PAGE=0x2...scrollInfo.fMask=0x10|0x1|0x2|0x4|0x8;GetScrollInfo(richTextBox1.Handle,1,refscrollInfo);//nBar=1->VScrollbarvScrollBar1.Maximum=(scrollInfo.max-scrollInfo.nPage+1)*10;vScrollBar1.Value=scrollInfo.nPos*10;label2.Text="scrollbarmax="+vScrollBar1.Maximum+",currentpos="+vScrollBar1.Value;}[DllImport("user32")]privatestaticexternintGetScrollInfo(IntPtrhwnd,intnBar,refSCROLLINFOscrollInfo);publicstructSCROLLINFO{publicintcbSize;publicintfMask;publicintmin;publicintmax;publicintnPage;publicintnPos;publicintnTrackPos;}
参考:C#:SynchronizeScrollPositionoftwoRichTextBoxes?HowtoknowifRichTextBoxverticalScrollbarreachedthemaxvalue?
刚测试了一下,发现richTextBox1一定要带滚动条,滚动richTextBox1的滚动条,vScrollBar1才有变化,我想要的效果是:richTextBox1没有滚动条,直接由vScrollBar1代替它的垂直滚动条.
解决方案四:
请高手们指点一二?