Formulář jako vlastní komponenta   otázka

VB.NET, Komponenty, WinForms

Prosím o radu, jak mohu vytvořit formulář jako vlastní komponentu podobně jako třeba OpenFileDialog. Mám své komponenty v knihovně, kterou využívám v jiném projektu. Jediný formulář z knihovny však není v ToolBoxu viditelný. Rád bych taky, aby se formulář choval stejně jako zmiňovaný OpenFileDialog, tedy pokud bych jej vybral, Designer si vygeneruje kód instance formuláře a v Design módu ve Visual Studiu se objeví dole v liště její ikona.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den, nevím zda jsem správně pochopil Váš požadavek, ale pokud potřebujete vytvořit vizuální prvek který se má objevit v toolBoxu tak přidejte do projektu UserControl. V designeru do něj přetáhnete a nastavíte požadované vizuální prvky, případně vytvoříte další vlastnosti, metody události atd. Pak se s prvkem pracuje uplně stejně jako s jinými prvky které jsou v toolBoxu. Někde na tomto webu byl o vytváření userControl článek.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Mám komponentu formuláře s vlastnostmi, metodami a událostmi... Potřeboval bych ji ale zobrazit také v ToolBoxu. Pokud ji potom v design módu přetáhnu na nějaký formulář, vytvoří se v něm její instance s ikonou, jinak viditelná nebude. Prakticky úplně stejné chování jako OpenFileDialog.

Nejde mi o jakékoliv jiné použití formulářového okna v aplikaci, protože to problém není, ale o řešení pomocí externí knihovny s použitím v design módu Visual Studia.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ale to přece nebude mít žádné výhody. Instanci toho formuláře můžete vytvořit vždy ručně. Vzhledem k tomu, že se jedná o přihlašovací okno, tak bude v programu používáno minimálně a není důvod držet jeho instanci stále, ale používat ho pomocí Using...End Using pouze v momentě, kdy je potřeba vyžádat si přihlašovací údaje.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Výhody to má minimálně v případě desítek podobných projektů, při jejich tvorbě, ale také v možnostech aktualizace. Jinak je to v podstatě to samé... Mohli bychom místo toho vzít v úvahu nějakou nevizuální komponentu, například připojení k databázi, vlastní časovač...

Jde mi spíše o funkčnost a použití takové komponenty ve Visual Studiu, jak jsem popsal výše.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Konkrétně se jedná o dialogové okno pro přihlášení, které přistupuje do databáze a ověřuje uživatele. Výběrem komponenty z ToolBoxu si VS vygeneruje kód pro instanci a default vlastnosti, ikonu instance umístí do lišty podobně jako OpenFileDialog komponentu. Po kliknutí na ikonu by se v Property Gridu jednoduše nastavovaly vlastnosti.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Řeším téměř stejný problém. Již jsem něco vyzkoušel, ale zatím nemám hotový kód, tak jen rámcově a s rezervou:

1)Vytvořil jsem si formulář (FormNumPad)

2)Vytvořil jsem si komponentu v novém modulu (NumPad) odvozenou od System.ComponentModel.Component s instancí FormNumPad

3)do předchozího modulu jsem sloučil kódy co jsem napsal a co vytvořil Designer (designer.vb) a doplnil konstruktor formuláře

Imports System.Windows.Forms
Public Class NumPad01
	Private UserForm As New FormNumPad
	Public Sub Show()
		UserForm.ShowDialog()
	End Sub

End Class

Public Class FormNumPad
#Region "Designer Added"


	Inherits System.Windows.Forms.Form

	'Form overrides dispose to clean up the component list.
	'	<System.Diagnostics.DebuggerNonUserCode()> _
	Protected Overrides Sub Dispose(ByVal disposing As Boolean)
		Try
			If disposing AndAlso components IsNot Nothing Then
				components.Dispose()
			End If
		Finally
			MyBase.Dispose(disposing)
		End Try
	End Sub

	'Required by the Windows Form Designer
	Private components As System.ComponentModel.IContainer
	Public Sub New()
		InitializeComponent()

	End Sub

	'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()
		Me.Button1 = New System.Windows.Forms.Button
		Me.Label1 = New System.Windows.Forms.Label
		Me.SuspendLayout()
		'
		'Button1
		'
		Me.Button1.Location = New System.Drawing.Point(72, 32)
		Me.Button1.Name = "Button1"
		Me.Button1.Size = New System.Drawing.Size(75, 23)
		Me.Button1.TabIndex = 0
		Me.Button1.Text = "Button1"
		Me.Button1.UseVisualStyleBackColor = True
		'
		'Label1
		'
		Me.Label1.AutoSize = True
		Me.Label1.Location = New System.Drawing.Point(69, 81)
		Me.Label1.Name = "Label1"
		Me.Label1.Size = New System.Drawing.Size(39, 13)
		Me.Label1.TabIndex = 1
		Me.Label1.Text = "Label1"
		'
		'Form2
		'
		Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
		Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
		Me.ClientSize = New System.Drawing.Size(292, 273)
		Me.Controls.Add(Me.Label1)
		Me.Controls.Add(Me.Button1)
		Me.Name = "Form2"
		Me.Text = "Form2"
		Me.ResumeLayout(False)
		Me.PerformLayout()

	End Sub
	Friend WithEvents Button1 As System.Windows.Forms.Button
	Friend WithEvents Label1 As System.Windows.Forms.Label
#End Region

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback