Компонент+Форма

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

GPP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 351
Зарегистрирован: 02.11.2005 (Ср) 8:02
Откуда: г.Невельск о.Сахалин

Компонент+Форма

Сообщение GPP » 17.01.2009 (Сб) 9:02

Здравствуйте! Пишу небольшой компонент для работы с сокетами. Подобный Winsock 6.0 в VB 6. Так вот. Все прекрасно работает. Но столкнулся с такой небольшой проблемой... Прослушка и прием данных происходит в отдельном потоке... Все события передаються через делегаты в поток основной формы. Но для того чтобы компонент знал в какой поток передавать данные я передаю ссылку на форму при вызове метода "Listen"

Сейчас это выглядит так:

TCPClientSocket.RemoteHost="127.0.0.1"
TCPClientSocket.LocalPort=112
TCPClientSocket.Listen(Me)


Как сделать так, что бы компонент знал на какой форме он находиться без "ручного" указания ему :) То есть что бы я просто писал ***.Listen. Заранее огромное человеческое спасибо!
GPP(c) Gorlo Pavel Programming

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Компонент+Форма

Сообщение Williams » 17.01.2009 (Сб) 15:17

Вот здесь посмотри
И вы думаете, что вас оставят в живых после прочтения этого поста?

GPP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 351
Зарегистрирован: 02.11.2005 (Ср) 8:02
Откуда: г.Невельск о.Сахалин

Re: Компонент+Форма

Сообщение GPP » 16.02.2009 (Пн) 14:15

Данный код либо не работает, либо я чего-то не понимаю :). Вроде там только для визуального компонента.

It turns out that the solution is even simpler. All that is needed is to reference the Site property of the base component and get the designer host information from it. Here are the steps to achieve the goal:
Create a new item in your Windows Project and use the "Component" template.
Switch to "Code View" and add the following code:


Код: Выделить всё
Imports System.ComponentModel.Design

Private _form As Form
Private Sub GetFormInstance() ' called from constructor
   Dim _host As IDesignerHost = Nothing
   If MyBase.Site IsNot Nothing Then _host = _
   CType(MyBase.Site.GetService(GetType(IDesignerHost)), IDesignerHost)
   If _host IsNot Nothing Then _form = CType(_host.RootComponent, Form)
End Sub


Open the Designer code (you may have to toggle the "Show All Files" button at the top of the Solution Explorer and then expand the files under the component to see the file with the .Designer extension).
At the end of the default constructor add a call to the GetFormInstance function. The code should look like this:


Код: Выделить всё
<System.Diagnostics.DebuggerNonUserCode()> _
Public Sub New()

   MyBase.New()

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

   'Added by developer
   GetFormInstance()

End Sub


У меня в проекте даже нет такого файла... Пробовал все это в "основном коде", но не чего не выходит. _host все равно пустой :(
GPP(c) Gorlo Pavel Programming


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 87

    TopList