Document.write
создает разметку HTML, а не простой текст. В HTML новая строка представлена элементом <br/>
. Если бы вы писали в консоль браузера, вы бы не создавали разметку HTML, поэтому символ новой строки "\ n" будет уместным.
Я просто сделал немного попрашайничества и моего собственного тестирования. Я использовал Отражатель для исследования и обнаружил пару вещей. MouseWheel
событие обеспечивает a MouseEventArgs
параметр, но OnMouseWheel()
переопределение в DataGridView
броски это к Handled
MouseEventArgs
. Это также работает при обработке MouseWheel
событие. OnMouseWheel()
действительно становится названным, и это находится в DataGridView
переопределение, которое это использует SystemInformation.MouseWheelScrollLines
.
Так:
Вы могли действительно обработать MouseWheel
событие, бросая MouseEventArgs
кому: HandledMouseEventArgs
и набор Handled = true
, затем сделайте то, что Вы хотите.
Подкласс DataGridView
, переопределение OnMouseWheel()
самостоятельно, и попытка воссоздать весь код я читал здесь в Отражателе за исключением замены SystemInformation.MouseWheelScrollLines
с 1
.
Последний был бы огромной болью, потому что она использует много частных переменных (включая ссылки на ScrollBar
s) и Вы имели бы замену некоторыми с Вашим собственным и получили бы/установили бы других, использующих Отражение.
Я разделил бы DataGridView на подклассы в свое собственное управление (Вы знаете, добавляете новые Windows Forms-> файл Пользовательского элемента управления и изменяете базовый класс от Управления до DataGridView).
public partial class MyDataGridView : DataGridView
Затем переопределите метод WndProc и замените чем-то как так:
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x20a)
{
int wheelDelta = ((int)m.WParam) >> 16;
// 120 = UP 1 tick
// -120 = DOWN 1 tick
this.FirstDisplayedScrollingRowIndex -= (wheelDelta / 120);
}
else
{
base.WndProc(ref m);
}
}
Конечно, у Вас будет проверка, что Вы не устанавливаете FirstDisplayedScrollingRowIndex на число за пределами диапазона Вашей сетки и т.д. Но это работает вполне хорошо!
Richard
ОБНОВЛЕНИЕ: Так как я теперь узнал что DataGridView
имеет a MouseWheel
событие, я добавил второе, более простое переопределение.
Один способ выполнить это состоит в том, чтобы разделить на подклассы DataGridView
и переопределение WndProc
добавить специальную обработку WM_MOUSEWHEEL
сообщение.
Этот пример ловит перемещение колеса мыши и заменяет его вызовом к SendKeys.Send
.
(Это немного отличается, чем просто прокрутка, так как она также выбирает следующую/предыдущую строку DataGridView
. Но это работает.)
public class MyDataGridView : DataGridView
{
private const uint WM_MOUSEWHEEL = 0x20a;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_MOUSEWHEEL)
{
var wheelDelta = ((int)m.WParam) >> 16;
if (wheelDelta < 0)
{
SendKeys.Send("{DOWN}");
}
if (wheelDelta > 0)
{
SendKeys.Send("{UP}");
}
return;
}
base.WndProc(ref m);
}
}
2-е взятие (с теми же протестами, как упомянуто выше):
public class MyDataGridView : DataGridView
{
protected override void OnMouseWheel(MouseEventArgs e)
{
if (e.Delta < 0)
SendKeys.Send("{DOWN}");
else
SendKeys.Send("{UP}");
}
}
Переопределяя OnMouseWheel и не называя основу. OnMouseWheel должен работать. Некоторые мыши колеса имеют специальные настройки, которые Вы, возможно, должны установить сами, чтобы это работало правильно. См. это сообщение http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=126295&SiteID=1