К сожалению, на данный момент кажется, что это невозможно: http://www.mobilexweb.com/blog/ipad-mini-detection-for-html5-user-agent
Два дня назад я написал в Твиттере о первой обнаруженной проблеме: « Подтверждено, что пользовательский агент iPad Mini такой же, как iPad 2 ». Я получил буквально сотни ответов, в которых говорилось, что прослушивание пользовательского агента - это плохая практика, что мы должны обнаруживать функции, а не устройства и т. Д. И т. Д.
Ну, да, ребята, вы правы, но это не имеет прямого отношения к проблеме. И мне нужно добавить еще одну плохую новость: не существует техники на стороне клиента, которая бы делала «обнаружение функций», ни .
Если вы не против тратить деньги на упоминание о мертвом дереве, The Rails Way действительно того стоит. Опубликованные руководства, вероятно, будут вашим лучшим выбором на этот раз, но если вы планируете много работать с Rails, эта книга действительно ломает его и делает понятным. Мне это очень помогло. Удачи.
любые изменения, внесенные вами в конструктор унаследованного элемента управления, будут отображаться в конструкторе. Более того, если вы хотите добавить к нему некоторые свойства, они будут отображаться в окне свойств, что придаст ему еще большую гибкость. Если же поддержка дизайнера для вас не имеет значения, то я не вижу других недостатков у служебного класса.В конечном итоге служебный класс будет более удобным в обслуживании, чем подклассовый элемент управления, если только вы не сделаете что-то более существенное для расширения DataGridView, чем изменение сортировки.
Ваш подход к служебному классу (использование DataGridView в конструкторе) - надежный подход.
Если вы используете C # 3, возможно, стоит взглянуть на методы расширения . Похоже, вы добавляете поведение к типу, который, как вы хотели, существовал из коробки.
static class GridExtMethods
{
public static void SortAsICommand(this MyGrid grid)
{
//grid.Prop = value; possible
grid.Sort += MyCustomSort;
}
static void MyCustomSort(object sender, SortEventArgs evtArgs)
{
Console.WriteLine("Sort {0} and {1}", evtArgs.First, evtArgs.Second);
}
}
....
static void Main()
{
var grid = new MyGrid(10,20);
grid.SortAsICommand();
//grid.RaiseEvent(); do something that raises the event
}