Jag fick tipset, när jag tidigare frågade om InputBox, och hur man skulle få controllen "nere"(inte ritas upp i en Form) att istället för att använda MessageBox är ingen control, så den kan inte visa denna. Då försöker vi så här. Benni, HGej(igen)Andreas. nej det tipps du fått var att ärva från "component" inte från messagebox Då får jag försöka att söka för att se hur det skall kunna användas. Jag har kommit en BRA bit på vägen, men sprungit in i väggen nu. Varför har du den inte som: Hej Johan.Bygga en InputBox av en usercontrol
<code>
public class in_Box : System.Windows.Forms.UserControl
</code>
..använda
<code>
public class in_Box : System.Windows.Forms.MessageBox
</code>
..istället.
Detta fungerar inte för mig, jag får ett error:
<code>
The designer could not be shown for this file because none of the classes within it can be designed. The designer inspected the following classes in the file:
in_Box --- The base class 'System.Windows.Forms.MessageBox' cannot be designed.
</code>
Har jag fattat fel eller bara gör jag fel?
PS
Mina andra usercontroler blev väldigt bra.
DSSv: Bygga en InputBox av en usercontrol
Mvh JohanSv:Bygga en InputBox av en usercontrol
Jag ville ha userkontrolle så att den inte skulle ritas upp, utan befinna sig "där nere" ung vid taskbaren.
Hur görs detta?Sv: Bygga en InputBox av en usercontrol
"Där nere" i Visual Stuidio eller faktiskt i Task-baren ?Sv:Bygga en InputBox av en usercontrol
Jo jag vet inte vad det utrymmet kallas för, men jag menar i VS.
Tänk dig att du lägger till en dialogkontroll (printDialog), då vet du, att du inte "ritar" upp den i Form1, utan att den lägger sig "under/nedanför" Formen.
Har jag förklarat mig begripligt nu?Sv: Bygga en InputBox av en usercontrol
Sv:Bygga en InputBox av en usercontrol
[REDIGERAT]
Ni har jag hittat/kommit på det, så jag kan gå vidare.
Tack för eran hjälp.
Nu när jag använder:
<code>
public class in_Box : System.ComponentModel.Component
</code>..så får jag mycket riktigt usercontrollen där jag skall ha den, men det tycks vara svårt
att defeniera upp formen, dvs lägga till saker.
Jag hadde velat använda:
<code>
public System.Windows.Forms.Form;
</code>..för att få någonting att "arbeta med", och visst skall det gå, men hur?Sv: Bygga en InputBox av en usercontrol
<code>
public class in_Box : System.ComponentModel.Component
{
//
private Form in_putBox = new Form();
private System.Windows.Forms.Button btnOK;
private System.Windows.Forms.Button btnCancel;
private System.Windows.Forms.TextBox txtValue;
private System.Windows.Forms.Label lblPrompt;
private string Prompt
{
get
{
return lblPrompt.Text;
}
set
{
lblPrompt.Text = Value;
}
}
private string Value
{
get
{
return txtValue.Text.Trim();
}
set
{
txtValue.Text = Value.Trim();
txtValue.SelectAll();
txtValue.Focus();
}
}
</code>
Så här lång fungerar det.
Om jag INTE lägger till new form, så får jag problem överallt.
Jag har lagt det mesta private, jag ville inte att de variabler skulle synas utanför usercontrolen(fel tänkt?).
Nu till problemet(iden till detta hittade jag på nätet, skrivet för VB.net, men jag har försökt att översätta).
För att kunna retunera någonting så skulle det finnas en public class..
<code>
public static string inputBox(string prompt, string title, string defaultVal)
</code>
Mera om den classen sen.
Jag anropar så här<code>
in_Box1.inputBox("Kolla","Vad blir detta?","Vad tror du");</code>
Error som jag får:
<code>
E:\C#\C#-koder\test\WindowsApplication1\Form1.cs(110): 'WindowsApplication1.Form1.in_Box1' denotes a 'field' where a 'class' was expected
E:\C#\C#-koder\test\WindowsApplication1\Form1.cs(110): Static member 'WindowsApplication1.in_Box.inputBox(string, string, string)' cannot be accessed with an instance reference; qualify it with a type name instead
</code>
Om jag istället ändra classen inputBox till
<code>
public void inputBox(string prompt, string title, string defaultVal)
</code>Då har jag inga fel, men jag kan inte använda mig av return, och då faller ju hela iden med en inputbox.
Classen inputBox ser ut så här:
<code>
public void inputBox(string prompt, string title, string defaultVal)
{
in_Box dlg = new in_Box();
dlg.in_putBox.Text = title;
dlg.Prompt = prompt;
dlg.Value = defaultVal;
if (dlg.in_putBox.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
// return dlg.Value;
}
else
{
// return defaultVal;
}
}
</code>
Vad som händer är att jag får in värdet i dlg.in_putBox.Text = title; , men inte i de andra (Promt,Value).
Det känns som om jag är snubblande nära en lösning, men jag kan inte komma på lösningen för mina problem just nu.Sv:Bygga en InputBox av en usercontrol
public string inputBox(string prompt, string title, string defaultVal)
{
in_Box dlg = new in_Box();
dlg.in_putBox.Text = title;
dlg.Prompt = prompt;
dlg.Value = defaultVal;
if (dlg.in_putBox.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
return dlg.Value;
}
else
{
return defaultVal;
}
}
???
Sv: Bygga en InputBox av en usercontrol
Ja, ett stort steg på väg.
Jag får nu tillbaka i returen(text som jag skrev in).
Det som INTE fungera är:
Jag öppnar ju upp den så här:
inputBox(string prompt, string title, string defaultVal)
Där promt står för t ex "Skriv in ett namn"
tittle är inputBoxens titel
defaultVal skrivs in i textrutan.
För att få det att fungera, så var jag tvungen att skriva
<code>
dlg.txtValue.Text=defaultVal;
dlg.Prompt = prompt;
</code>
Men detta innebär ju att det står samma i labelen som i textrutan.
strrängen defaultVal är inga problem med att hantera, men strängen prompt är väre.
Om jag försöker att ändra det så får jag fel.
[REDIGERAT]
promt var tydligen ett resarverat ord, när jag ändrade det, så fungerade allt.
Tack för eran hjälp.