kalla metoder från en klass till form1.cs
okay, sorry ska försöka vara tydligare.
Jag har denna koden i Form1.cs
using System;
using System.Drawing;
using System.Windows.Forms;
namespace SalesApp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//=================================Funtions
private void ResetTextBox()
{
Action<Control.ControlCollection> func = null;
func = (controls) =>
{
foreach (Control control in controls)
if (control is TextBox)
(control as TextBox).Text = "0";
else
func(control.Controls);
};
func(Controls);
}
//--------------------------EnableTextbox
private void EnableTextBox()
{
Action<Control.ControlCollection> func = null;
func = (controls) =>
{
foreach (Control control in controls)
if (control is TextBox)
(control as TextBox).Enabled = false;
else
func(control.Controls);
};
func(Controls);
}
//--------------------------EnableChecktbox
private void EnableCheckBox()
{
Action<Control.ControlCollection> func = null;
func = (controls) =>
{
foreach (Control control in controls)
if (control is TextBox)
(control as TextBox).Enabled = false;
else
func(control.Controls);
};
func(Controls);
}
//=========================================
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
e.Graphics.DrawString(richTextBox1.Text, new Font("Arial", 11, FontStyle.Regular), Brushes.Black, new Point(0, 0));
}
private void button3_Click(object sender, EventArgs e)
{
printPreviewDialog1.ShowDialog();
}
private void button5_Click(object sender, EventArgs e)
{
DialogResult iExit;
iExit = MessageBox.Show("Confirm if you want to exit", "Sales Management System", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (iExit == DialogResult.Yes)
{
Application.Exit();
}
}
private void Form1_Load(object sender, EventArgs e)
{
picSales.Image = Properties.Resources.zaraicon;
richTextBox1.Clear();
EnableTextBox();
ResetTextBox();
EnableCheckBox();
}
private void picSales_Click(object sender, EventArgs e)
{
var imageSize = picSales.Image.Size;
var fitSize = picSales.ClientSize;
picSales.SizeMode = imageSize.Width > fitSize.Width || imageSize.Height > fitSize.Height ?
PictureBoxSizeMode.Zoom : PictureBoxSizeMode.CenterImage;
}
}
}
Jag har en checkbox för varje item jag vill lägga in i koden
private void chkJeansJeggers_CheckedChanged(object sender, EventArgs e)
{
if (chkJeansJeggers.Checked)
{
textBox1.Text = "";
textBox1.Enabled = true;
textBox1.Focus();
picSales.Image = Properties.Resources.Jeans;
}
else
{
textBox1.Text = "0";
textBox1.Enabled = false;
picSales.Image = Properties.Resources.zaraicon;
}
private void chkCoatsJackets_CheckedChanged(object sender, EventArgs e)
{
if (chkCoatsJackets.Checked)
{
textBox1.Text = "";
textBox1.Enabled = true;
textBox1.Focus();
picSales.Image = Properties.Resources.Coat;
}
else
{
textBox1.Text = "0";
textBox1.Enabled = false;
picSales.Image = Properties.Resources.zaraicon;
}
och så vidare för 20st items.
istället för att ha all 20 items i min Form1.cs "main" så undrar jag om det går att lägga dom i en klass som vi kan kalla för "items".
och sedan anropa i Form1.cs när Checkbox1 till 20 används?
Hej!
Får se om jag förstår dig rätt:
Jag tänker mig att du vill koppa alla dina checkboxar till samma event-metod?
För att du ska få det att fungera så behöver du ju då kunna avgöra vilken checkbox det var som eventet kommer ifrån. Det får du ut från sender-objektet.
Därefter behöver du bestämma dig för vad du ska göra, och här blir det kanske lite lurigare eftersom du behöver få en logisk koppling mellan checkboxen som var avsändare och vad som ska hända.
Om det är så att varje checkbox också har en inmatningsruta (det är svårt att veta exakt från din beskrivning och din kod, men jag gissar det) så är mitt tips att knåpa ihop en egen kontroll bestående av både checkbox och textbox och sedan från formuläret skapa upp en mängd med sådana kontroller istället.
Edit: Efter en andra genomläsning så verkar det som om du har en och samma textbox oavsett vilken checkbox som du vill använda och endast byter bild (och sätter textboxen till enabled). Då fungerar det förmodligen bättre med den övre delen i lösningsförslaget. Kanske skulle du också kunna ha en egenskap på respektive checkbox för att avgöra vilken bild som ska visas och därmed skulle koden kunna bli mycket enklare.
Hej!
Får se om jag förstår dig rätt:
Jag tänker mig att du vill koppa alla dina checkboxar till samma event-metod?
För att du ska få det att fungera så behöver du ju då kunna avgöra vilken checkbox det var som eventet kommer ifrån. Det får du ut från sender-objektet.
Därefter behöver du bestämma dig för vad du ska göra, och här blir det kanske lite lurigare eftersom du behöver få en logisk koppling mellan checkboxen som var avsändare och vad som ska hända.
Om det är så att varje checkbox också har en inmatningsruta (det är svårt att veta exakt från din beskrivning och din kod, men jag gissar det) så är mitt tips att knåpa ihop en egen kontroll bestående av både checkbox och textbox och sedan från formuläret skapa upp en mängd med sådana kontroller istället.
Edit: Efter en andra genomläsning så verkar det som om du har en och samma textbox oavsett vilken checkbox som du vill använda och endast byter bild (och sätter textboxen till enabled). Då fungerar det förmodligen bättre med den övre delen i lösningsförslaget. Kanske skulle du också kunna ha en egenskap på respektive checkbox för att avgöra vilken bild som ska visas och därmed skulle koden kunna bli mycket enklare.
Har kommit så här långt.
Först så la jag till InitializeInputs(); i Form1.cs
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
InitializeInputs();
}
void InitializeInputs()
{
Items.Form1 = this;
Items.Form1.Controls[""].Click += Items.chkJeans_CheckedChanged;
}
//=================================Funtions
sedan gjorde jag en klass som heter items och la till min checkbox.
using System;
using System.Windows.Forms;
namespace SalesApp
{
public static class Items
{
public static Form Form1;
public static void chkJeans_CheckedChanged(object sender, EventArgs e)
{
if (chkJeans.Checked)
{
textBox1.Text = "";
textBox1.Enabled = true;
textBox1.Focus();
picSales.Image = Properties.Resources.Jeans;
}
else
{
textBox1.Text = "0";
textBox1.Enabled = false;
picSales.Image = Properties.Resources.zaraicon;
}
}
}
}
Det error jag får nu är på (chkJeans.Checked) The name 'chkJeans' does not exit in current context. Men min checkbox heter ju det? så nått är fel på vägen....
textBox1 och picSales hittas inte heller....
EDIT: nej, nästa kommer vara en checkbox som heter chkCoat som kommer ändra value i en textBox2 sedan en som heter chkSwimwear som pratar med textBox3 osv. 20st
EDIT 2: Tror aldrig de kommer fungera för alla funktioner för checkbox och textbox ligger Form1.Cs
private void Form1_Load(object sender, EventArgs e)
{
picSales.Image = Properties.Resources.zaraicon;
richTextBox1.Clear();
EnableTextBox();
ResetTextBox();
EnableCheckBox();
}
med flera. störigt....!
Har kommit så här långt.
Först så la jag till InitializeInputs(); i Form1.cs
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
InitializeInputs();
}
void InitializeInputs()
{
Items.Form1 = this;
Items.Form1.Controls[""].Click += Items.chkJeans_CheckedChanged;
}
//=================================Funtions
sedan gjorde jag en klass som heter items och la till min checkbox.
using System;
using System.Windows.Forms;
namespace SalesApp
{
public static class Items
{
public static Form Form1;
public static void chkJeans_CheckedChanged(object sender, EventArgs e)
{
if (chkJeans.Checked)
{
textBox1.Text = "";
textBox1.Enabled = true;
textBox1.Focus();
picSales.Image = Properties.Resources.Jeans;
}
else
{
textBox1.Text = "0";
textBox1.Enabled = false;
picSales.Image = Properties.Resources.zaraicon;
}
}
}
}
Det error jag får nu är på (chkJeans.Checked) The name 'chkJeans' does not exit in current context. Men min checkbox heter ju det? så nått är fel på vägen....
textBox1 och picSales hittas inte heller....
EDIT: nej, nästa kommer vara en checkbox som heter chkCoat som kommer ändra value i en textBox2 sedan en som heter chkSwimwear som pratar med textBox3 osv. 20st
Jag skulle gjort såhär:
I Visual Studio: Skapa en ny kontroll genom att
1. Högerklicka på projektet och välj Add... -> User Control (Windows Forms)
2. Skapa din User Control som förmodligen innehåller en CheckBox, en textbox och en bildvisare
3. Implementera all logik som du vill ha i din user control som rör interaktionen mellan checkboxen och textboxen
4. I huvudformläret lägger du sedan till 20 st sådana user controls om det är specifikt 20 du ska ha. Du kan också göra det dynamiskt så att det skapas ett antal baserat på en konfiguration.
5. Nu behöver du lägga till avläsning av data från huvudformuläret från dina user controls.
Hej igen!
Jag insåg att det kan vara lurig att förstå hur jag menade, så jag knåpade ihop ett litet exempel som du kan ha att titta på för inspiration när du jobbar vidare.
Jag har skickat en länk till en kompletta koden i ett PM till dig.
- Igår Google höjer pristaket på Play-butiken med 150 procent 13
- 27 / 5 Microsoft avslöjar de verkliga systemkraven för Windows 11 36
- 27 / 5 Bungie vinner prejudicerande fall mot fuskutvecklare 29
- 26 / 5 Här är funktionerna Microsoft tar bort i Windows 11 24H2 24
- 26 / 5 Komplicerat lämna spelbibliotek till arvingar 32
- Igår Youtube snabbspolar automatiskt videor för Adblock-användare 39
- Igår SweClockers Noobbyggarguide - Del 3: Den dramatiska moderkortsmonteringen 6
- Igår Webhallen vill återvända till södra Sverige nästa år 27
- Igår Inet reser till Computex – Vad vill du se på datormässan? 37
- Igår Googles AI-sök slutar tipsa om att äta sten 45
- Webhallen vill återvända till södra Sverige nästa år27
- Detta gäller när HBO Max blir Max165
- Plats för lite gubbgnäll10006
- Tips på vart köpa ersättningskuddar till Sennheiser hd800s ?3
- Välja extern DVD-brännare24
- Scrolla längst ner till sista inlägget..0
- Överprisad begagnad speldator med defekta komponenter från butik30
- SweClockers Noobbyggarguide - Del 3: Den dramatiska moderkortsmonteringen6
- Har Microsoft inga kompetenta utvecklare?7
- Underväldigande prestanda Asus Rog Strix Scar 15 2022 (i9 12900H, 32gb 4800mhz DDR5, RTX 3070Ti)5
- Säljes Asus X670E-F ATX -> Mot ditt ITX eller mATX
- Säljes Dell 34" Alienware AW3423DWF OLED 21:9 165hz
- Säljes Sapphire RX 6700XT Nitro+
- Köpes Budget kort sökes
- Köpes Letar efter ett M-ATX B760, Z690 eller Z790
- Säljes Gaming-PC | Ryzen 7 2700X | RTX 2070 | 16 GB RAM | Win11 Pro
- Säljes Intel Arc A750 säljes / bytes
- Säljes Stilren ITX dator
- Säljes Corsair RGB DDR5 32GB 6000MHZ
- Skänkes GTX 550Ti och Benq 22tum monitor, PS5/PS4 spel, Razer
- Youtube snabbspolar automatiskt videor för Adblock-användare39
- SweClockers Noobbyggarguide - Del 3: Den dramatiska moderkortsmonteringen6
- Webhallen vill återvända till södra Sverige nästa år27
- Inet reser till Computex – Vad vill du se på datormässan?37
- Googles AI-sök slutar tipsa om att äta sten45
- Lagring på magnetband ökar21
- Google höjer pristaket på Play-butiken med 150 procent13
- Framtidens skärmar bygger du själv24
- Håll koll på årets stora hårdvarulanseringar25
- Filminstitutets VD vill införa Netflix-skatt125