Перейти к содержимому

Фотография

Господа .Net 3.5Если такие ???


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 117

#81
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений

Стало интересно а как вобще самому сделать контрол,например свой grid с нуля. Рисовать через GDI ?

А чем не устраивает готовое решение из состава .NET Framework?
  • 0

#82
"0x0000"

"0x0000"
  • Свой человек
  • 543 сообщений
хм, да всем устраивает, просто есть желание глубоко разбираться в .net. Пока освоил только вершину айсберга((
  • 0

#83
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений
В таком случае, начинать построение собственных контролов лучше с более простых примеров, а не с Grid. Точнее, в .NET 2.0 он называется DataGridView (а в .NET 1.1 был его предшественник - DataGrid). Для начала лучше строить несложные контролы, которые не получают и не отображают данные из СУБД.

Тогда все получается довольно просто. При запуске студии выбирается тип проекта - конечно, "Windows" :D, а из установленных шаблонов (templates) выбирается Windows Control Library.

Самодельный контрол (допустим, он называется MyControl) будет храниться в сборке *.dll, поэтому компилятору нужно указать опцию /target:dll. MyControl будет наследовать от System.Windows.Forms.UserControl.

Рисовать кое-что придется, но это тоже не трудно - надо всего лишь перейти на вкладку [Design]. При необходимости в клиентскую область проектируемого контрола добавляются стандартные контролы - видимые (например, PictureBox) и невидимые (Timer). А дальше остается только хорошо запроектировать класс MyControl - добавить в него данные, методы, свойства, события. Затем протестировать MyControl - поместить его в несложное пользовательское приложение типа Windows Forms. Хотя для тестирования контролов прямо в студии есть еще и испытательный контейнер - UserControl Test Container. Вот, в основном, и все. Удачи. :D
  • 0

#84
udos

udos
  • Случайный прохожий
  • 2 сообщений
И зачем придумывать велосипед?
Зачем писать гриду, если таких написано сотни. Нужна навороченная грида - мне кажется, самый простой способ заюзать DevExpress. А если неохото тратить денег, то поищите на CodeProject. Там примеров куча. И не придется писать свою "с нуля".
  • 0

#85
"0x0000"

"0x0000"
  • Свой человек
  • 543 сообщений
udos - дык я писал что хочу разобраться в .net. И не всегда готовые решения идеальны. Учиться тоже не мешает кстати.
Visual1 - спасибо,всё получилось,и правда не очень сложно.

Сообщение отредактировал "0x0000": 28.11.2008, 11:07:45

  • 0

#86
udos

udos
  • Случайный прохожий
  • 2 сообщений
Вот отличный пример написания своей гриды.
http://www.codeproje...ridcontrol.aspx

По архитектуре: при написании своих контролов лучше сразу закладывать разделение логики контрола от его отрисовки (использовать Renderer-ы например). Для логических отвязанных объектов (например, ячейка, столбец) создавать отдельный класс и там реализовывать логику. Удачи Вам в изучении. :)
  • 0

#87
"0x0000"

"0x0000"
  • Свой человек
  • 543 сообщений
udos - спасибо. Видел я этот пример. Давно уже кодепроектом каждый день пользуюсь, самый лучший ресурс.
  • 0

#88
Я Легенда

Я Легенда

    Читатель

  • Завсегдатай
  • 297 сообщений
[Visual C#]
public BankAccount() : this("[Unknown]", 0)
{}
public BankAccount(string name) : this(name, 0)
{}
public BankAccount(string name, decimal balance)
{
_name = name;
_balance = balance;
}


[Visual Basic]
Public Sub New()
Me.New("[Unknown]", 0)
End Sub
Public Sub New(ByVal name As String)
Me.New(name, 0)
End Sub
Public Sub New(ByVal name As String, ByVal balance As Decimal)
_name = name
_balance = balance
End Sub


Пошто тут применяют вызов Me, This? Чаво ета за способ обращения к конструктору такой?
  • 0

#89
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений
Чаво, чаво... :laugh: Это хоть и необязательный, но полностью законный способ. Применяется, когда нужно избежать избыточного кода инициализации. Если бы такого способа не было, пришлось бы дополнительно подробно расписывать оба конструктора, BankAccount() и BankAccount(string name), у которых параметров недостаточно для инициализации всех членов класса. А здесь просто вся работа делегируется конструктору, имеющему наибольшее число параметров.

В общем, это хороший стиль программирования. :rotate:
  • 0

#90
Я Легенда

Я Легенда

    Читатель

  • Завсегдатай
  • 297 сообщений
так ета - а какие альтернативные методы написания то?
Это просто пример готовый был - понятно что стиль хороший - примеры то готовые от майкрософт :lol:
  • 0

#91
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений

так ета - а какие альтернативные методы написания то?

Альтернативные методы - не использовать this. То есть, для каждого конструктора, какие только нужны в классе, тупо расписывать опять все в его теле:

public BankAccount() 
{
   _name = "[Unknown]";
   _balance = 0;
}

public BankAccount(string name)
{
   _name = name;
   _balance = 0;
}
В этом примере неудобство отказа от this пока еще не очень ощущается. А если конструкторов больше? А если инициализировать надо не 2 переменных класса, а 22? :lol: Вот это и есть случай, когда "Уилл Смит отдыхает", и приходит "настоящий чистый писец". О котором ты сам же и говоришь в каждом своем сообщении.
  • 0

#92
Я Легенда

Я Легенда

    Читатель

  • Завсегдатай
  • 297 сообщений
Дак ета - короче для удобства кодинга - типа вызываем из конструктора его перегруженную версию, а он по количеству передаваемых параметров уже находит того что надо.

А вот чаво там за байда:

partial class - пишут что типа описание класса можно раскидать по разным файликам и т.д. - а чаво то сути идеи не изложили - типа для веберов круто и се - чем круто - нафиг надо - не понять.
  • 0

#93
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений
partial class - это не "байда". :lol: Это удобно для больших классов (сотни строк кода). Или когда на проекте работает много разработчиков. Например, можно разделить один класс так, что все закрытые поля и методы будут в одном файле, а открытые - в другом. Конечно, после компиляции все это будет один класс.

Для веберов тоже круто. Например, в ASP.NET студия генерирует много кода в классах автоматически. Удобно, что partial позволяет вынести этот автоматически сгенерированный код в отдельный файл, чтобы он не мешал разработчику.

Сообщение отредактировал Visual1: 29.11.2008, 23:18:12

  • 0

#94
Zulkar

Zulkar

    Читатель

  • В доску свой
  • 3 243 сообщений
К партиал классам отношение двоякое. Да, они удобны, не спорю. По всем причинам, которые изложил Visual1, они позволяют разделять методы класса по группам.
Но мое другое Я, то, которое читало Голлуба, Макконела, Александреску, Мейерса и др. - говорит что это костыль, из-за не совсем верной архитектуры. Есть большое подозрение, что вообще-то для таких целей, как например необходимый код в ASP.NET можно с успехом использовать наследование, при должном рефакторинге и перепроектировке. Либо включение.
А с партиал классами получается немного странная реализация MVC, на мой взгляд, когда все находится в одном классе.
  • 0

#95
Я Легенда

Я Легенда

    Читатель

  • Завсегдатай
  • 297 сообщений
Дак ета - это не та байда про которую рассказывал Гайдар Магдануров на лонче Майкрософт?

А то он там байки травил про фреймворк 3.5 - типа там можно в классы членов прицеплять на лету и все такое - народ там таращил глаза удивленно - мол как ета :smoke:
  • 0

#96
Zulkar

Zulkar

    Читатель

  • В доску свой
  • 3 243 сообщений

А то он там байки травил про фреймворк 3.5 - типа там можно в классы членов прицеплять на лету и все такое - народ там таращил глаза удивленно - мол как ета :smoke:

Ну, это не изобретение майкрософта, во многих языках такое есть, и довольно давно.
  • 0

#97
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений

Но мое другое Я, то, которое читало Голлуба, Макконела, Александреску, Мейерса и др. - говорит что это костыль, из-за не совсем верной архитектуры. Есть большое подозрение, что вообще-то для таких целей, как например необходимый код в ASP.NET можно с успехом использовать наследование, при должном рефакторинге и перепроектировке. Либо включение.

Какие такие причины для "большого подозрения"? Вообще-то, partial классы никто никого использовать не заставлял. И почему вдруг partial class как-то мешает использовать наследование и включение, и/или проводить рефакторинг?

А бросаться презрительными словами ("костыль" и т.д.), для этого много ума не надо.
  • 0

#98
Zulkar

Zulkar

    Читатель

  • В доску свой
  • 3 243 сообщений

Какие такие причины для "большого подозрения"?

Да например, то, что крайне нужны классы в тысячи строк кода. Не слишком хороший стиль программирования, имхо, сопровождение будет интересным и завлекательным. И то - что в одном классе объединены разные вещи, тоже не является хорошим признаком.

Вообще-то, partial классы никто никого использовать не заставлял. И почему вдруг partial class как-то мешает использовать наследование и включение, и/или проводить рефакторинг?

Заставлял как раз таки. Автоматическая генерация - это не заставление? Опять таки - сопровождение кода становится более сложным когда класс раскидан по файлам, ИДЕ конечно выручает, но привязка языка к ИДЕ - не во всех случаях самой удобной, это плохо по любому. Я не говорю что с партиалами код обязательно получится плохим, я считаю, что с ним проще написать неподдерживаемый код.

А бросаться презрительными словами ("костыль" и т.д.), для этого много ума не надо.

Надеюсь вы не воспринимаете это как личное оскорбление?
  • 0

#99
Visual1

Visual1
  • В доску свой
  • 1 198 сообщений

Да например, то, что крайне нужны классы в тысячи строк кода. Не слишком хороший стиль программирования, имхо, сопровождение будет интересным и завлекательным. И то - что в одном классе объединены разные вещи, тоже не является хорошим признаком.

Они (тысячи строк кода) стали нужны по объективным причинам. Требования к удобству пользовательского интерфейса очень возросли. Но в любом случае, вам никто не запрещает выносить за пределы класса самостоятельные (на ваш взгляд) сущности.

Заставлял как раз таки. Автоматическая генерация - это не заставление? Опять таки - сопровождение кода становится более сложным когда класс раскидан по файлам, ИДЕ конечно выручает, но привязка языка к ИДЕ - не во всех случаях самой удобной, это плохо по любому. Я не говорю что с партиалами код обязательно получится плохим, я считаю, что с ним проще написать неподдерживаемый код.

Никакой "привязки языка к IDE" нет. Если вам так не нравится зависеть от IDE, то блокнот (notepad.exe) и компилятор командной строки (csc.exe) всегда к вашим услугам. :smoke:


А бросаться презрительными словами ("костыль" и т.д.), для этого много ума не надо.

Надеюсь вы не воспринимаете это как личное оскорбление?

Как личное оскорбление нет, поскольку "костыль" было сказано не обо мне, а ключевом слове partial. Но обосновать свое утверждение (почему partial - костыль языка C#) вы не сумели.
  • 0

#100
Zulkar

Zulkar

    Читатель

  • В доску свой
  • 3 243 сообщений

Они (тысячи строк кода) стали нужны по объективным причинам. Требования к удобству пользовательского интерфейса очень возросли. Но в любом случае, вам никто не запрещает выносить за пределы класса самостоятельные (на ваш взгляд) сущности.

Приведите пример интерфейса, который требует тысяч строк кода для конкретного случая. И причем эти тысячи строк нельзя засунуть глубоко в библиотеку. У меня складвается впечатление, что библиотека плохо спроектирована.

Никакой "привязки языка к IDE" нет. Если вам так не нравится зависеть от IDE, то блокнот (notepad.exe) и компилятор командной строки (csc.exe) всегда к вашим услугам. :smoke:

Предпочитаю vim. Привязка заключается в том, что
1) Нельзя блокнотом узнать какие же функции экспортирует либа. Для этого нужна студия.
2) Не всегда легко догадаться, где же находится второй кусок класса, на который идет ссылка.
3) Очень тяжело определить блокнотом, в каком же файле находится класс из секции using.
Этого уже достаточно для того чтобы сказать, что шарп привязан к студии.

Но обосновать свое утверждение (почему partial - костыль языка C#) вы не сумели.

Я же говорил - мое имхо, из-за неправильной проектировки библиотеки, когда требуется писать интерфейс на тысячи строк кода, которые нельзя, или тяжело использовать повторно. Если бы было можно - эти тысячи строк писать было бы не нужно.
  • 0


Количество пользователей, читающих эту тему: 1

пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0

Размещение рекламы на сайте     Предложения о сотрудничестве     Служба поддержки пользователей

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.