Пожалуйста, попробуйте это:
SELECT d.ID,d.[Date],MIN(d.[Time]) AS [Time-in],MAX(d.[Time]) AS [Time-out]
,CASE WHEN MAX(d.[Time]) > '17:00:00' THEN CONVERT(TIME,CONVERT(DATETIME,MAX(d.[Time])) - CONVERT(DATETIME,'17:00:00')) ELSE NULL END AS [OT]
FROM (
SELECT t.ID
,CONVERT(DATE,t.[Date]) AS [Date]
,CONVERT(TIME,t.[Date]) AS [Time]
FROM [YourTableName] t
) d
GROUP BY d.ID,d.[Date]
;
AutoScrollPosition представляет расположение отображаемого прямоугольника прокручиваемого элемента управления. Полученные значения координат X и Y являются отрицательными, если элемент управления прокручивается от его начальной позиции (0,0). Когда вы устанавливаете это свойство, вы всегда должны назначать положительные значения X и Y, чтобы установить позицию прокрутки относительно начальной позиции. Например, если у вас есть горизонтальная полоса прокрутки и вы установили x и y на 200, вы переместите прокрутку на 200 пикселей вправо; если затем установить x и y равными 100, прокрутка, кажется, переместится влево на 100 пикселей, потому что вы устанавливаете его на 100 пикселей от начальной позиции. В первом случае AutoScrollPosition возвращает {-200, 0}; во втором случае возвращает {-100,0}.
Источник: MSDN: ScrollableControl. Свойство AutoScrollPosition
Я думаю, что метод GetVisibleRectangle, который я написал ниже, - это то, что вы запрашивали. Последовательные запуски этого с прокруткой дали следующий результат при прокрутке элемента управления:
Rectangle.Empty
. Обратите внимание, как в дополнение к изменениям ширины и высоты, X, Y также изменились при прокрутке.
Источник:
private void button1_Click(object sender, EventArgs e)
{
Rectangle r = GetVisibleRectangle(this.panel1, button4);
System.Diagnostics.Trace.WriteLine(r.ToString());
}
public static Rectangle GetVisibleRectangle(ScrollableControl sc, Control child)
{
Rectangle work = child.Bounds;
work.Intersect(sc.ClientRectangle);
return work;
}