我有一個面板(用戶控件),它需要滾動鼠標滾輪。在面板上有許多多行文本框。即使它們沒有滾動條,它們在聚焦時捕捉鼠標輪事件。如何將事件傳遞給父控件,以便面板在選中多行文本框時使用鼠標滾輪進行滾動?如何使多行文本框傳遞MouseWheel事件,以便容器可滾動
0
A
回答
2
解決方案是使用從TextBox繼承並重寫WndProc方法的自定義控件。以下溶液從一個答案適應於similar question:
class MouseTransparentTextBox : TextBox
{
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case 0x020A: // WM_MOUSEWHEEL
case 0x020E: // WM_MOUSEHWHEEL
if (this.ScrollBars == ScrollBars.None && this.Parent != null)
m.HWnd = this.Parent.Handle; // forward this to your parent
base.WndProc(ref m);
break;
default:
base.WndProc(ref m);
break;
}
}
}
0
一個更直接的方法是捕集鼠標滾輪事件。在發射時,向上或向下移動插入符號很容易,然後使用ScrollToCaret()使htat線可見。
private void ScrollTextBox(object sender, MouseEventArgs e)
// Mouse wheel has been turned while text box has focus
{
// Check scroll amount (+ve is upwards)
int deltaWheel = e.Delta;
if (deltaWheel != 0)
{
// Find total number of lines
int nLines = edtAddress.Lines.Length;
if (nLines > 0)
{
// Find line containing caret
int iLine = edtAddress.GetLineFromCharIndex(edtAddress.SelectionStart);
if (iLine >= 0)
{
// Scroll down
if (deltaWheel > 0)
{
// Move caret to start of previous line
if (iLine > 0)
{
int position = edtAddress.GetFirstCharIndexFromLine(iLine - 1);
edtAddress.Select(position, 0);
}
}
else // Scroll up
{
// Move caret to start of next line
if (iLine < (nLines - 1))
{
int position = edtAddress.GetFirstCharIndexFromLine(iLine + 1);
edtAddress.Select(position, 0);
}
}
// Scroll to new caret position
edtAddress.ScrollToCaret();
}
}
}
}
相關問題
- 1. 如何在jquery中正確使用mousewheel和滾動事件?
- 2. 防止多行文本框「偷」滾動事件
- 3. 如何防止添加文本時滾動多行文本框?
- 4. 從父容器傳播滾動事件到子容器
- 5. 如何修改現有的AS3事件以便我可以傳遞數據?
- 6. 如何防止ScrollViewer使用MouseWheel事件
- 7. 從uibutton傳遞滾動事件到uiscrollview
- 8. 如何將憑證傳遞給機器,以便我可以使用Microsoft.Win32.RegistryKey.OpenRemoteBaseKey()?
- 9. 我可以在文本框的onChange事件中傳遞ID名稱嗎?
- 10. 如何更新文本框,以便它可以更改金額?
- 11. 如何滾動到多行文本框的底部?
- 12. 如何同步兩個多行文本框的滾動?
- 13. 如何將排序條件傳遞給方法以便可以使用sort_by
- 14. 如何修改div以便滾動文本不會超越它?
- 15. 多行文本框的點擊事件
- 16. 垂直文本Changed事件期間滾動文本框的Scintilla
- 17. 將MouseWheel事件從子項傳遞給父項
- 18. 使用jQuery從多行文本框傳遞值ajax
- 19. MouseWheel,確定向上和向下滾動事件
- 20. ScrollViewer在滾動時不觸發MouseWheel事件
- 21. XBAPs和MouseWheel事件
- 22. MouseWheel:滾動與縮放
- 23. 需要mousewheel滾動usercontrol
- 24. mousewheel在div上滾動
- 25. 如何覆蓋fieldset.html模板,以便可以傳遞更多參數
- 26. 如何存儲文本框的值以便以後使用Javascript?
- 27. 如何在多行文本框中不斷滾動到文本的末尾?
- 28. 我如何滾動,以便在擴展擴展器後可見控件
- 29. 防止可滾動容器(Sencha 2)內的傳送帶滾動?
- 30. 如何文本框的值傳遞給Java腳本按鈕單擊事件
在我的情況下,這沒有奏效。覆蓋WndProc是正確的,但我不得不重新發布消息到父控件。 'PostMessage(Parent.Handle,m.Msg,m.WParam,m.LParam);' – RancidOne 2017-03-01 18:53:01