СообЧа > База Знаний > Программирование > .NET

Вопрос

Не удается установить значение поля структуры функцией CallByName, например так:

Dim a As MyStruct
Callbyname (a, "Pole1", CallType.Set, "МоеЗначение")

Ничего после вызова этой функции не изменяется. Почему?

Ответ

Тут все просто: у CallbyName параметр типа object, поэтому ваша структура боксится, и поле устанавливается у другой структуры, лежащей в куче.

Вопрос

Crystal Reports при печати выдает только одну копию хотя в диалоге указывается больше. Как это исправить?

Ответ

Найдите на CrystalDesicions все hot fix'ы и service pack'и (вроде этого) и проинсталлируйте их — должно помочь.

Вопрос

А как в VB.NET сгенерировать ошибку (исключение)?

Я хочу, чтоб мое исключение можно было потом отловить так:

Try

Catch e As BadError
  Console.WriteLine("BadError!!!")
     Catch e As VeryBadError
 Console.WriteLine("VeryBadError!!!!!!!!!")
End Try

Ну то есть, чтоб у моего исключения было вроде как имя (например, BadError)

Ответ

Это не сложно. Делай свой класс, наследующий от Exception. Например, так:

Public Class MyStupidException
 Inherits Exception

Overrides Function ToString() As String
  Return "Ошибка при чтении базы!"
     End Function

Overrides ReadOnly Property Message() As String
  Get
   Return "Ошибка при чтении базы!"
 End Get
  End Property
End Class

И теперь генерируй его:

Throw New MyStupidException ()

Павел Сурменок

Вопрос

Где в WinForms элемент управления Image (который в VB6 был)?

Ответ

Image — графический компонент, то есть он не поддерживается Windows, а рисуется кодом на форме (или где-то еще). В общем, это полная чушь, поэтому за ненадобностью и для совместимости все графические компоненты (Shape, Line, Image) убрали из .NET Framework. Вместо Image используйте PictureBox. И больше читайте Эплмана!

Вопрос

Где достать полное описание WMI?

Ответ

    WMI классы перечисляются здесь:
http://msdn.microsoft.com/library

   А вот аналогичная ссылка в локальном MSDN:
ms-help://MS.VSCC/MS.MSDNVS/wmisdk/r_wmicls_00j7.htm

Вопрос

Где можно взять пример работы в сети с .NET?

Ответ

Скачай с microsoft.com набор примеров «101 VB .NET Samples». Там есть работа с сетью. А вообще, читай MSDN. Смотри в сторону пространства имен System.Net, ИМХО, надо юзать TCPClient.

Павел Сурменок

Вопрос

Где можно скачать TreeView для ASP .NET?

Ответ

   Тут:
http://www.asp.net/IEWebControls/

Вопрос

Есть ли .NET компиляторы от Borland?

Ответ

Они делают C# Builder, и, вроде, уже сделали Delphi .NET.

Павел Сурменок

Вопрос

Есть ли в .NET класс для работы с реестром?

Ответ

Есть, так и называется Registry Class. В мелкософтовских примерах даже семпл неплохой был.

Из конференции VB

Вопрос

Открыл один проект и увидел мне непонятный код:

AddHandler help1.Update, AddressOf OnIDEUpdate
Protected Sub OnIDEUpdate(ByVal sender As Object, ByVal e As EventArgs)
     'какой-то код
End Sub


Зачем нужен метод AddHandler?

Ответ

Тут мы назначаем обработчик события для события Update объекта help1.
То есть, теперь при возникновении этого события будет вызываться процедура OnIDEUpdate.

Павел Сурменок

Вопрос

Зачем нужны методы BegineEdit, EndEdit, NewRow, AcceptChanges, RejectChanges?

Ответ

Решил заглянуть в MSDN, чтобы почитать об этом… И обнаружил, что это вообще методы разных классов: BeginEdit и EndEdit — методы DataRow, а AcceptChanges и GetChanges — методы DataSet'а…

Метод GetChanges позволяет получить копии всех измененных записей (измененных после последнего вызова метода AcceptChanges) из DataTable в отдельную DataTable.

Насчет BeginEdit и EndEdit:

Use the BeginEdit method to put a DataRow into edit mode. In this mode, events are temporarily suspended allowing the user to make multiple changes to more than one row without triggering validation rules. For example, if you need to ensure that the value of the column for a total amount is equal to the values for the debit and credit columns in a row, you can put each of the rows into edit mode to suspend the validation of the row values until the user attempts to commit the values.

Примерный перевод: BeginEdit используется для перевода DataRow в состояние редактирования. В этом режиме события временно приостанавливаются, позволяя юзеру произвести несколько изменений без запуска проверки правил.

То есть, я так понимаю, если в DataSet определены какие-нть ключи, например, UniqueConstraint, то после изменения каждой записи врубается проверка соответствтвия полей правила ключа (например, Unique проверяет значение поля на уникальность). Если же нам надо изменить сразу пачку записей, то будут сильные тормоза. Поэтому придумана такая система. Сначала вызываеи BeginEdit для изменяемых записей, делаем что хотим с записями. Потом либо вызываем для записей EndEdit, либо вызываем метод AcceptChanges датасета (он сам вызовет EndEdit у строк).

Вопрос

Как в .Net можно передать новосозданной форме параметр?
Дело в том, что у меня будет форма для печати, которой нужно передать данные.
Как это сделать?

Ответ

В коде PrintingForm надо подредактировать конструктор.

Public Sub New()

замени на что-то типа
Public Sub New (Data as string)
'В переменной Data находятся данные для печати — можешь кидать их
     'куда надо.

   'А код, что там был до этого оставь!
End Sub

А создавать так:

Dim PrintingForm as new frmPrint ("Гейтс — мой друг")

Артем Кривокрисенко

Вопрос

Как в DataGrid установить ширину столбца?

Ответ

Это делается через DataGridColumnStyle. Создаешь DataGridColumnStyle, устанавливаешь ему ширину столбца (свойство ) и в свойстве MappingName указываешь имя столбца, для которого задается ширина. Потом создаешь DataGridTableStyle, устанавливаешь ему MappingName, добавляшь DataGridColumnStyle в коллекцию GridColumnStyles. И потом DataGridTableStyle добавляешь в коллекцию TableStyles грида.

Вот пример:

Dim cs As New DataGridTextBoxColumn
cs.Width=50
cs.MappingName="ID"
Dim ts As New DataGridTableStyle
ts.MappingName = "SoobChaCD"
GridReport.TableStyles.Add(ts)

Вопрос

Как в VB.NET в TextBox разрешить ввод только цифр? Приветствуется метод, для которого нужно только поменять какое-нибудь св-во.

Ответ

Старый добрый простой способ (но для VB6):

Private Sub Text1_KeyPress(KeyAscii As Integer)
    If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0
End Sub


Если нужно _только_ цифры и больше ничего, вот вариант решения из форума gotdotnet.ru (просто кладезь мудрости :-))

====

Дальше я еще больше удивился когда необнаружил у TextBox'a возможности вводить только цифры, как с применением стиля ES_NUMBER (это-же так просто, думал я, почему они недобавили возможность в виде свойства выставлять этот стиль):

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal _
hwnd As Integer, ByVal nIndex As Integer, ByVal dwNewLong As Integer) As Integer
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal _
hwnd As Integer, ByVal nIndex As Integer) As Integer

Private Const GWL_STYLE As Integer = (-16)
Private Const ES_NUMBER As Integer = &H2000

SetWindowLong(txtDev1.Handle.ToInt32, GWL_STYLE,
GetWindowLong(txtDev1.Handle.ToInt32, GWL_STYLE) Or ES_NUMBER)


====

А этот способ позволит вводить в TextBox и символы новой строки:

Private Sub txtDevMany_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtDevMany.KeyPress
     If Not (e.KeyChar.IsNumber(e.KeyChar) Or e.KeyChar.IsControl(e.KeyChar)) Then e.Handled = True
End Sub

Из конференции VB

Вопрос

Как в VB.NET найти путь к приложению?

Ответ

AppDomain.CurrentDomain.BaseDirectory

или

Application.StartupPath

Из конференции VB

Вопрос

Можно ли в VB .Net сделать так, что б при каждом нажатии F5 увеличивался некий номер билда?

Ответ

СМ пример: mdVersion.zip

Savenger, Алексеем Вишневским

Вопрос

Как в VB.NET объявить строку фиксированной длины?

Ответ

<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=128)> Public szCSDVersion As String

Павел Сурменок

Вопрос

Задача такая: есть Double число, а надо получить целое с 2 знаками после запятой. Округляться все должно в большую сторону. Какая функцияв VB.NET отвечает за это?

Ответ

Math.Round

Алексей Вишневский

Вопрос

Как в Vb.NET узнать идентификатор картинки PictureBox1.Image?
Первое, что пришло в голову -

PictureBox1.Image.handle

отказывается работать — такого мембера у имиджа просто нет.

Ответ

Получи с Image BitMap, а уже с него бери Handle:

intHandle = New Bitmap(PictureBox1.Image).GetHbitmap.ToInt32

Алексей Вишневский

Вопрос

Как будет наиболее правильно и просто в VB.NET проверить, существует ли файл/директория?

Ответ

Для файла:

System.IO.File.Exists("имяфайла")

Для папки:

System.IO.Directory.Exists("имяпапки")

Павел Сурменок

Вопрос

Как в VB.NET работать с базой из локальной сети?

И как потом защитить эту базу от несанкционированного доступа?

Ответ

Лучше всего поставить на комп с базой SQL Server. Тогда к базе можно подключаться удаленно без всяких проблем (по IP). И защитить базу тоже можно будет.

Находится она в MSDE в инсталле VS .NET.

Павел Сурменок

Вопрос

Как в VB.NET сделать контрол, желательно, в стиле комбобокса, с автозаполнением?

Например, ввел туда Nokia 3310 один раз, что б оно в списке сохранилось. Ввел Siemens C35 — что б тоже сохранилось. При вводе похожих названий работала автоподстановка. Есть такое в VB .Net или сторонних контролах, или все вручную надо делать?

Ответ

Вручную, примерно так:

Public Class CoolCombo
  Inherits System.Windows.Forms.ComboBox

#Region " Windows Form Designer generated code "

Public Sub New()
  MyBase.New()

'This call is required by the Windows Form Designer.
  InitializeComponent()

'Add any initialization after the InitializeComponent() call

     End Sub

'UserControl1 overrides dispose to clean up the component list.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
  If disposing Then
   If Not (components Is Nothing) Then
components.Dispose()
  End If
     End If
MyBase.Dispose(disposing)
   End Sub

'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer

'NOTE: The following procedure is required by the Windows Form Designer
 'It can be modified using the Windows Form Designer.
 'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
  components = New System.ComponentModel.Container()
     End Sub

#End Region

Private Sub Сombo_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress
 Static Text As String
  Dim l As Integer
 If e.KeyChar = Chr(13) Then
 MyBase.Items.Add(MyBase.Text)
  MyBase.Select(0, MyBase.Text.Length)
  Text = ""
   Else
   Text &= e.KeyChar
  l = Text.Length
  Dim i As Integer
 For i = 0 To MyBase.Items.Count — 1
If InStr(MyBase.Items(i), Text) = 1 Then
MyBase.Text = MyBase.Items(i)
  MyBase.Select(l, MyBase.Text.Length — l)
   Exit For
  End If
   Next
    End If
     End Sub
End Class

Алексей Вишневский

Вопрос

Как бы мнев VB.NET сделать аналог:

Form1_Click()
     Form2.Show vbModal, Me
Exit Sub

Т.е. нужно, что б вторая форма была модальной.

Ответ

Form2.ShowDialog

Алексей Вишневский

Вопрос

Потихоньку перехожу на VB.Net.

Меня волнует вопрос о создании массивов объектов. В 6 версии можно было добавить новый элемент в коллекцию с помощью Load и проблем не было. Здесь же этого сделать не получается. Как быть?

Ответ

В VB .NET массивов элеметов нет. Однако, вы сами можете создать массив объектов из кода приложения. Посмотрите, как создаются элементы в коде в регионе Form Designer (он сверху в редакторе). Просто на уровне формы объявить массив нужного типа. А потом в обработчике собятия загрузки формы создать сами объекты, ссылки загруить в массив и установить их свойства.

Из конференции Expert_FAQ

Вопрос

Как в VB.NET создать свой невизуальный компонент, так чтобы выдернул его с ToolBox-а на форму, а он упал бы вниз (типа Таймера), а в Property Editor-е можно было бы его свойства поменять. Как такое сделать?

Ответ

Вот, сравните, цепь предков TextBox'а:

System.Object
  System.MarshalByRefObject
   System.ComponentModel.Component
    System.Windows.Forms.Control
     System.Windows.Forms.TextBoxBase
      System.Windows.Forms.TextBox

И цепь предков Timer'а:

System.Object
   System.MarshalByRefObject
    System.ComponentModel.Component
     System.Windows.Forms.Timer

Видим отличие: Timer и другие невизуальные компоненты наследует от System.ComponentModel.Component, а визуальные компоненты наследуют от System.Windows.Forms.Control.

Павел Сурменок

Вопрос

Как можно в .NET вывести стандартный диалог создания соединения с БД?

Ответ

Function CreateConnString(Optional ByVal parentForm As Form = Nothing)
As String
Dim dataLink As Object =
Microsoft.VisualBasic.Interaction.CreateObject("DataLinks")

'On Error Resume Next
If Not parentForm Is Nothing Then
dataLink.hWnd = parentForm.Handle.ToInt32()
End If

' display the dialog
Dim o As Object = dataLink.PromptNew()
If o Is Nothing Then Return "" Else Return o.ConnectionString.ToString()

End Function

'===============================================
'============= variant 2========================
'Need add reference to COM component
'MS OLEDB Service Component 1.0 Type Library

Function CreateConnString(Optional ByVal parentForm As Form = Nothing)
As String
'Dim dataLink As Object = CreateObject("DataLinks")
Dim dataLink As New MSDASC.DataLinks()

'On Error Resume Next
If Not parentForm Is Nothing Then
dataLink.hWnd = parentForm.Handle.ToInt32()
End If

' display the dialog
Dim o As Object = dataLink.PromptNew()
If o Is Nothing Then Return "" Else Return o.ConnectionString.ToString()

End Function
'===============================================
'To edit existing connection use dataLink.PromptEdit()

Павел Сурменок

Вопрос

Как можно достать название\серию\серийный номер процессора\винчестера\видеокарты?

Ответ

Используя WMI классы Win32_Processor, Win32_LogicalDisk, Win32_IDEControllerDevice, Win32_VideoController и т. д. В .NET Framework WMI представлен в пространстве имен System.Management.

Вопрос

Как на ASP.NET перенаправить браузер на другую форму?

Ответ

Попробуй

Response.Redirect

или

Response.Transfer

А вообще, почему бы сразу на первой странице в форме не указать action=step2.aspx ?

Павел Сурменок

Вопрос

На VB.NET надо написать *.dll. Подскажите порядок.

Ответ

Зайди на www.vbnet.ru. Там лежит замечательный трактат на 500 кб о том, как писать библиотеки классов .NET.

Павел Сурменок

Вопрос

Для чего нужны методы BegineEdit и EndEdit класса DataRow, я понял (согласно их описанию).
Проблема такова: при применении их объектом DataRow они не работают, т.е. не редактируют реальную БД, тоже самое касается и добаления новых колонок (DataTable.Columns.Add) и т.д., т.е. всех методов, касающихся редактирования БД.
Получатся так, что измениея происходят где-то во временных представлениях БД и никак не влияют на реальную. Путей синхронизации реальной и виртульной БД я не нашел. Если эти методы существуют, то как-то они должны применяться и работать? А-то получается что DataSet нужен лишь для представления или как-бы отображения данных со своими правилами?

Ответ

Они по идее НЕ ДОЛЖНЫ редактировать источник данных! DataSet — это набор отсоединенных данных. Принцип работы с данными в ADO .NET строится примерно так:

1. Получаем данные из исчтоника в Dataset. Это делается с помощью объекта DataAdapter его методом Fill.
2. Всячески извращаемся с данными в Dataset: показывам юзеру, читаем, изменяем, добавляем новые строки и т.д. Это делается, собственно, через методы/свойства самого Dataset, в том числе, коллекция Rows.
3. Если надо, то все изменения закидываем назад в базу данных. Это также делается с использованием DataAdpater, но уже его методом Update. Причем нужно не забыть установить соответствующие свойства UpdateCommand, InsertCommand, DeleteCommand, которые будут использованы для изменения, добавления и удаоения записей в БД, соответственно.

Вопрос

Как обстоить дела на VB.Net с DirectX'ом?

Ответ

Для DirectX 9 есть Managed DirectX. Есть и примеры на VB.Net

Алексей Вишневский

Вопрос

Как перехватить нажатия кнопок Вверх и Вниз в TextBox?

Ответ

Нужно перекрыть у текстбокса функцию ProcessKeyMessage, а там уж можно делать чего захочется…

Вопрос

Как получить номер или экземпляр строки DataTable, на которой стоит курсор в DataGrid?

Ответ

Используйте свойство BindingContext формы, например так:

DataRowView rowView = (DataRowView)BindingContext[dataTable].Current;

, где dataTable — это таблица, привязанная к DataGrid'у.

Вопрос

Как работать с COM портом в VB .NET?

Ответ

Смотри классы из пространства имен System.Net. Например, класс TCPClient. В MSDN есть пример на эту тему.

Вопрос

Если я использую в своей программе какой-либо компнонент, то нужно ли при установке этой программы его регестрировать?

Ответ

.NET библиотеки не требуют регистрации. А если использукются ActiveX, то их надо регистрировать.

Павел Сурменок

Вопрос

Хотелось бы деклорациив VB.NET, стоящие в начале модуля/класса/формы «свернуть», подобно процедуре/функции. Это как-то можно осуществить?

Ответ

#Region "Мои декларации"
     'Тут делай декларации
#End Region

Алексей Вишневский

Вопрос

Как сделать менюшки типа Office XP или как в самой среде разработки .NET?

Ответ

В рассылке "Visual Basic: новости сайтов…" было:

<..>
Хочу поделиться со всеми кто пишет или начинает писать на платформе .NET. По данной ссылке
http://www.crownwood.net
находится дистрибутив с DLL'ой и примерами которая помогает создать интерфейс в стиле похожей на стиль Visual Studion.NET. Я считаю что при желании можно быстро въехать в программный код.


Она не только бесплатная, но еще и с исходниками! На C#.

Из конференции VB

Вопрос

Создаю ASP.NET Web Application

Там нужно указать размещение. В принципе, как я понял, можно это сделать на своем компе. Например, в http://localhost/math. А можно ли его запихнуть в корень http://localhost/ ? Например, я хочу сделать и стартовую страницу на ASP.NET. Если выбираю http://localhost/, то кнопка OK блокируется.

Ответ

Скорее всего, никак. На gotdotnet.ru давно дискуссии идут, к консенсусу так и не пришли.

Павел Сурменок

Вопрос

Как узнать значения полей текущей записи в DataTable?

Ответ

Я пользуюсь такими функциями:

Public Function GetCurrentRow(ByVal Grid As DataGrid) As DataRow
' Получаем связного и приводим его к его же типу
Dim cm As CurrencyManager = CType(Grid.BindingContext(Grid.DataSource, Grid.DataMember), CurrencyManager)
' Получаем перекрышку текущего ряда
Dim drv As DataRowView = CType(cm.Current, DataRowView)
' Наконец, из перекрышки высасываем САМ РЯД
Return drv.Row

End Function

Public Function GetRow(ByVal Grid As DataGrid, ByVal ID As Integer) As DataRow
' Получаем связного и приводим его к его же типу
Dim cm As CurrencyManager = CType(Grid.BindingContext(Grid.DataSource, Grid.DataMember), CurrencyManager)
' Получаем вид данных нашего грида
Dim dv As DataView = CType(cm.List, DataView)
' Из него берем перекрытое представление ряда по ПЕРЕКРЫТОМУ ЖЕ номеру
Dim drv As DataRowView = dv(ID)
' Наконец, из перекрышки высасываем САМ РЯД
Return drv.Row

End Function

Функция GetCurrentRow возвращает текущую запись Grid'а, указанного в параметре. А функция GetRow возвращает запись из грида по номеру записи.

Вопрос

Как узнать какие компоненты используются программой (если проект большой, есть вероятность что-нить потерять)?

Ответ

Глянь в SolutionExplorer в раздел References.

Павел Сурменок

Вопрос

В ListBox поставил стиль checkbox. Как узнать, какие элементы отмечены?

Ответ

With list1
    For i = 0 To .Items.Count — 1
    If .CheckedItems(i) = True Then
       Debug.WriteLine(.Items(i))
       End If
    Next
End With

Вопрос

Установил себе SQL Server (из MSDE). А как им управлять, добавлять/удалять базы?

Ответ

Открывай VS .NET. Открывай тама окошко Server Explorer (у меня оно там же, где и тулбокс). Там ищи свой SQL Server. Дальше разберешься сам — там все просто.

Или можешь где-нть достать инсталляху нормального SQL Server'а и поставить оттуда SQL Server Client Tools. Там есть некоторые очень полезные штуковины.

Павел Сурменок

Вопрос

В VB6 пользовался во время оперцаии Loop, коммандой DoEvents, в результате программка не висела на паузе целиком.
Какая альтернатива есть в .NET?

Ответ

System.Windows.Forms.Application.DoEvents()

Петров Антон Михаилович

Вопрос

Какие Вы мне посоветуете книги по NET?

Ответ

"Переход на VB .NET: стратегии, концепции, код" от Эплмана.

"Программирование для Microsoft .Net" (Джеф Просиз) от издательства Microsoft Press.

"Эффективная работа: Visual basic .NET" Евангелоса Петрусоса

На gotdotnet.ru советуют читать какого-то Рихтера.

Из конференции VB

Вопрос

Какие есть .NET языки, кроме стандартных из VSN?

Я знаю, что есть VB .NET, C#, VC++ .NET, J#, но, слышал, что есть и другие, которые не вошли в состав VSN. Какие?

Ответ

Не является секретом, что любой может разработать свой язык программирования для .NET, который должен поддерживать спецификацию CLI(CLS). Вот небольшой списочек нестандартных языков:

ActiveOberon .NET
Component Pascal .NET
Python
Perl for .NET
Delta Forth .NET

Еще есть Fortran. Не могу вспомнить, видал еще какой-то новый язык на букву E.

В последнем номере журнала Мир ПК была статья о том, что разрабатывается новый язык для .NET, разрабатывается с нуля на основе опыта Pascal, Modula и прочих, нозывается оно Zennon.

Насколько мне известно, все они являются консольными, т.е., не имеют своей Среды разработки.

Павел Сурменок

Вопрос

Какие есть нестандартные комбинации клавиш в окне кода VSN?

Ответ

Если при редактировании кода нажать [Ctrl]+[Enter], то текущая строчка сместится вниз, а вместо нее вставится новая, причем курсор будет расположен именно в новой.

Выполнить скроллинг кода можно кнопками [Ctrl]+[Up], [Ctrl]+[Down].

Перемейти в самый верх/низ _видимой_ части кода помогут [Ctrl]+[Page Up], [Ctrl]+[Page Down].

Хотя в VB6, например, [Ctrl]+[вверх/вниз] позволяла переходить к предыдущей или следующей процедуре или функции.

Артем Кривокрисенко

Вопрос

Хочу установить себе Visual Studio 7.
Какие системные требования этой Студии?

Ответ

Очень большие. Привожу данные для VS .NET Enterprise Architect (самая крутая версия, на 7 CD):

Процессор: PC with a Pentium II-class processor, 450 MHz
Рекомендуется: Pentium III-class, 600MHz1
Оперативная память: Windows 2000 Professional — 96 MB;
Windows 2000 Server — 192 MB;
Windows NT4.0 Workstation — 64 MB;
Windows NT 4.0 Server — 160 MB;
Windows XP Professional — 160 MB
Рекомендуется: 128 MB for 2000 Professional, 256 MB for 2000 Server, 96 MB for Workstation, and 192 MB for NT 4.0 Server, 192 MB for XP Professional1
Доступное дисковое пространство: 500 MB on system drive, 3 GB installation drive2
Операционная система: Windows® 2000, Windows XP, or Windows NT 4.03
CD-ROM Drive or DVD-ROM Required
Видео 800 x 600, 256 colors
Рекомендуется: High Color 16-bit
Мышь: Microsoft Mouse or compatible pointing device

Павел Сурменок

Вопрос

Есть функцияв VB.NET — MsgBox. Но мне кажется, что где-то в .NET Framework есть ее аналог, не подскажите, какой?

Ответ

MessageBox.Show

Павел Сурменок

Вопрос

Вычитал в умной книжке, что в .NET можно сериализировать структуры. А можно ли такой же фокус провести со своим классом?

Ответ

Да. Нужно только поставить атрибут Serializable.

Сериализуются переменные за исключением объявленных как Shared и помеченых <NonSerialized()>

Из конференции VB

Вопрос

Можно ли в VB.NET создать свой тип данных, чтоб можно было прибавить или отнять один от другого?

Ответ

На данном этапе развития VB .NET это нереально, потому что в нем нельзя переопределять операторы. Придется на C# писать.

Павел Сурменок

Вопрос

Хочу установить себе Microsoft Visual Studio 7
На скольких дисках эта Студия идет?

Ответ

По разному. Максимум (самая полная версия) — 7 CD. Минимум (это наши пираты такое делают) — 1 CD. Но на одном диске, конечно, MSDN нету. По слухам вполне работоспособную студию с MSDN можно приобрести на 3 CD.

Павел Сурменок

Вопрос

При установке VSN, на первом шаге пишет, что нет у меня "IIS" и "Front Page Server", нажимаю Skip, начинается установка ".NET Framework 1.1" и "J#.Net Package 1.1", минуты через 3 перезагружается, опять жужжит, но в конце выдает "Setup Failed". В чем проблема?

Ответ

Первым делом выруби, а лучше вообще удали антивирусы (особенно Касперского), скорее всего поможет. У меня из-за него не устанавливался VS .NET 2003.

Вопрос

Написал программу, которая использует WMI. Отлично работает в Win XP, но напрочь отказывается работать в Win 98! В чем может быть дело?

Ответ

   Скачайте и установите Windows Management Instrumentation (WMI) CORE 1.5 (Windows 95/98)
http://www.microsoft.com/downloads/

Вопрос

Я в проекте использую некоторые пространства (классы) такие как System.Text, System.IO и др. Нужно ли это учитывать при создании Setup'а (если да, то как)?

Ответ

Нет. Это все входит в состав .NET Framework. То есть, единственное, что нужно — это наличие .NET Framework.

Павел Сурменок

Вопрос

От чего наследуются стандартные типы данных?

Ответ

Все типы данных наследуют от Object.

Павел Сурменок

Вопрос

Если перейти с VB6 на VB.NET, то как быть с контролами при переносе своих проектов? .NET скушает их или придется искать новые под .NET версию?

Ответ

В .NET можн свободно работать с любыми COM объектами.

Но вот почти дословная цитата из книги Дана Эпплмана «Переход на VB.NET. Стратегии, концепции, код»:

"Если вы проектируете новое приложение, то сомневаться не приходится — .NET.

Если же вы поддерживаете старый проект, то затраты на заточку этого проекта под .NET будут просто огромны.

Для старых проектов лучше всего начать внедрение .NET с каких-либо компонентов, которые однозначно будут повазывать преимущество Технологии."

Вот так вот. То есть, существующий проект полностью перенести под .NET невозможно.

Из конференции VB

Вопрос

Подскажите аналог в VB.NET ShellExecute (из VB6).

Ответ

Process.Start

Павел Сурменок

Вопрос

Может, вы видели, что практически у всех функций .NET Framework есть тк называемые описания. Например, написал MessageBox.Show(… а тут тебе показывает описание каждого параметра в всплывающей подсказке.
А вот у моих функций такое не происходит. Я подумал, что этот Description мне поможет. Написал несколько пробных строк:

<Description("Класс предназначен для работы с матрицами")> Public _
Class Matrix
<Description("Конструктор создает новую матрицу, заполненную _
определенными _
данными")> Public Sub New(<Description("Исходные данные для _
матрицы")> ByVal _
v_Data(,) As Double)

Но вот только ничего это не дает. Все равно в подсказке к моей функции описания аргументов не отображаются. Что делать?

Ответ

Если ты сунешь этот класс в PropertyGrid — то как раз и увидишь все свои описания.

Алексей Вишневский

На gotdotnet.ru как-то был разговор подобный. Говорили, что в C# можно как-то, а в VB нельзя.

Дискуссия была большая, ее я не нашел. Но вот похожая тема:

http://www.gotdotnet.ru/Forums/CommonForum/6446.aspx

Это явно не атрибуты. Просто в код пишется закомментированный текст в формате XML. Кстати, можно попробовать и в VB это реализовать. Создать ручками XML и потом как-то прикрутить к сборке. Вот по этой теме ссылка:

http://www.gotdotnet.ru/DotNet/FAQ/CommonForum/468.aspx

Я в дебрях Microsoft Download видал прогу под названием типа XML Documentation Tool или что-то похожее. Может она для этого и нужна?

Павел Сурменок

Вопрос

Почему компиляция ASP.NET приложения длится так долго? У меня где-то 2 минуты…

Ответ

При первом запуске код aspx интерпретируется, потом компилируется, потом выполняется, кешируется и передается клиенту. На это, естественноно, уходит уйма времени. Но зато при последующих запросах сразу идет запуск скомпилированного кода и выдача результата клиенту. А если инфа есть в кеше, то даже код не выполняется, сразу из кеша инфа идет клиенту.

Плюс еще при запуске из VS .NET идет отладка приложения и на это тоже ресурсы уходят.

Павел Сурменок

Вопрос

Почему не работает функция MessageBox? Пишет:

Name 'MessageBox' is not declared.

Ответ

В консольном приложении эта функция по умолчанию не работает. Просто добавь в References библиотеку System.Windows.Forms и все будет путем.

Павел Сурменок

Вопрос

Делаю что-то вроде этого:

Dim cmd As New OdbcCommand()
Dim cmdUpd As New OdbcCommand()
Dim con As New OdbcConnection()
Dim dr As OdbcDataReader
MakeCon(con)
cmd.Connection = con
cmdUpd.Connection = con
cmd.CommandText="…"
dr = cmd.ExecuteReader
while dr.Read
cmdUpd.Cancel()
cmdUpd.CommandText = sqlUpd
cmdUpd.ExecuteNonQuery() — вот на этой строке возникает ошибка: There is already an open DataReader associated with this Connection which must be closed first
end while

Вопрос: зачем мне закрывать DataReader, который использует Connection, если я еще не закончил с ним работу, для того что бы выполнить cmdUpd.ExecuteNonQuery()?

Ответ

DataReader слишком низкоуровневая штука.
Он позволяет читать данные в одном напрвлении(зато очень быстро) и монопольно использует Connection. Тут надо либо 2 объекта Connection либо считать данные в DataSet и использовать их локальную копию.

Вопрос

В этом коде:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
AnimateWindow(Me.Handle, 2000, AW_CENTER)
End Sub

ошибка при передаче Me.Handle. Почему она происходит?

Ответ

Вместо Me.Handle надо писать Me.Handle.ToInt32.

Павел Сурменок

Вопрос

Краем уха слышал VB.NET работает на равне с C. Правда ли это?

Ответ

Правильно слышал. Они ж генерируют один и тот же IL-код и используют один и тот же рантайм.

На http://www.code.com.ua/ есть статья Дана Эпплмана про скорость C# и VB.

Артем Кривокрисенко

Вопрос

Допустим, в переменной typ As Type лежит тип (например, System.SByte). И есть переменная a As Object, в которой находится некий объект. Нужно переменную a конвертнуть в тип, который записан в переменной typ.
Как это сделать?
Почему-то функция CType юзаться напрочь не хочет (тычет носом во второй параметр, хотя типы данных совпадают (CType требует тип Type, я ей скармливаю тоже Type)).

Ответ

CType — это не функция, а синтаксическая конструкция языка VB (оно и понятно — ведь возвращаемый тип всегда разный). Поэтому вторым параметром должен стоять не объект типа Type, а имя типа.
Чтобы перевести из одного типа в другой, используйте System.Convert.

Вопрос

Если я правильно понял, то редактирование БД возможно при только использовании объекта OleDbDataCommand, т.е запросами SQL?

Ответ

По сути дела — да. В принципе, еще можно создать DataSet и закидывать изменения в базу через DataAdapter. Но он тоже использует объекты Command.
Если для тебя существенна работа без объектов Command, то используй библиотеку ADO или DAO, но это уже неуправляемый код получится, что не есть хорошо.

Вопрос

Существует ли .NET ассемблер?

Ответ

Уже сделан, в принципе. Причем, раньше, чем все остальные языки. IL Assembler. Можно любую .Net программу дизассемблировать, получить IL ASM-код, подправить и скомпилировать заново.

Savenger

Вопрос

Чем принципиально отличаются классы Trace и Debug?

Ответ

Trace используется для Web-приложений.
Насколько я знаю, Trace — для вывода информации на страницу, а Debug — в IDE в окошко типа Command или Output.

Павел Сурменок

Вопрос

Что означает эта строка:

Protected _statusBar As StatusBar

т.е. что означает Protected?

Ответ

Если стоит атрибут Protected, то свойство на будет видно извне класса, но будет доступно его потомкам (классам, наследующим от этого класса).

Павел Сурменок



Copyright © 2000-2004 Сообщество Чайников
Контактная информация