C# Lad checkbox køre en void

Tags:    checkbox c#

<< < 12 > >>
Hey Udviklere.
Jeg er pænt ny til c# og er igang med at lave et program til et spil.
Jeg har to PictureBox's.
Den ene kan load'e et billede.
PictureBox'ens størrelse er ikke ret stor, så billederne vil normalt ikke passe. Jeg har lavet en checkbox med teksten: "Maintain Aspect Ratio", og når folk "check'er" den, skulle billedet "Resize'e" og holde "Aspect Ratio". Problemet er bare at for det første er jeg ikke engang sikker på om min public void er rigtig, og så har jeg ingen anelse om hvordan jeg for min checkbox til at gøre som beskrevet.
Min kode til Maintain Aspect Ratio er:
public void GenerateThumbnail(string filePath, string origFileName, string thumbFileName, ImageFormat imgFormat)
{

System.Drawing.Image origImage = System.Drawing.Image.FromFile(filePath + @"\" + origFileName);

float WidthPer, HeightPer;
int NewWidth, NewHeight;
Size ThumbnailSize = new Size(100, 100);
if (origImage.Width > origImage.Height)
{
NewWidth = ThumbnailSize.Width;
WidthPer = (float)ThumbnailSize.Width / origImage.Width;
NewHeight = Convert.ToInt32(origImage.Height * WidthPer);
}
else
{
NewHeight = ThumbnailSize.Height;
HeightPer = (float)ThumbnailSize.Height / origImage.Height;
NewWidth = Convert.ToInt32(origImage.Width * HeightPer);
}
System.Drawing.Image origThumbnail = new Bitmap(NewWidth, NewHeight, origImage.PixelFormat);
Graphics oGraphic = Graphics.FromImage(origThumbnail);
oGraphic.CompositingQuality = CompositingQuality.HighQuality;
oGraphic.SmoothingMode = SmoothingMode.HighQuality;
oGraphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
Rectangle oRectangle = new Rectangle(0, 0, NewWidth, NewHeight);
oGraphic.DrawImage(origImage, oRectangle);
origThumbnail.Save(filePath + @"\" + thumbFileName, imgFormat);
origImage.Dispose();
}

Er den rigtig? Og hvordan får jeg min checkbox til at "Resize'e" og "Maintain'e Aspect Ratio" på billedet i min Picturebox?




16 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
PictureBox kan selv resize billedet uden tab:
Fold kodeboks ind/udCSharp kode 


I din event handler:
Fold kodeboks ind/udCSharp kode 


Angående din "void", den kan autogeneres
- du vælger din checkbox
- kigger i property vinduet
- klik på det lille lyn
- find CheckedChanged eller hvad den nu hedder og bare dobbeltklik på det tomme felt.



Indlæg senest redigeret d. 13.06.2011 13:26 af Bruger #14645
PictureBox kan selv resize billedet uden tab:
Fold kodeboks ind/udCSharp kode 


I din event handler:
Fold kodeboks ind/udCSharp kode 


Angående din "void", den kan autogeneres
- du vælger din checkbox
- kigger i property vinduet
- klik på det lille lyn
- find CheckedChanged eller hvad den nu hedder og bare dobbeltklik på det tomme felt.


Okay lige den sidste ting(håber jeg):
Har lagt den "første kode" in i openFileDialog1_FileOk event'en.
Har lavet MyPictureBox om til pictureBox1. Har lavet origFileName om til openFileDialog1.FileName Det tror jeg er rigtig. Den sidste ting er lige hvad skal jeg lave filepath om til? Og skal @"\" laves om?



Indlæg senest redigeret d. 13.06.2011 19:46 af Bruger #16668
Til at starte med, bør du lave det, så når man checker din checkbox og der sker en nedskalering, skal du ikke lave en opskalering igen hvis man unchecker checkboxen. Det bliver ikke pænt ;-) Ved en uncheck, skal du istedet vise det originale billede igen.

For at fange når din checkbox bliver krydset af (eller omvende) skal du kigge på den event der hedder CheckedChanged.

Når den "fyres af", skal du checke om den er krydset af (med if (dincheckbox.Checked) )og kalde din GenerateThumbnail metode. Hvis den bliver unchecked (en else til forrige if ), skal du kalde en metode der henter originalbilledet igen.





Indlæg senest redigeret d. 13.06.2011 11:54 af Bruger #9814
Jamen hvad er ordet for at call'e. Jeg har skrevet:

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.checked);


}



Indlæg senest redigeret d. 13.06.2011 12:22 af Bruger #16668
Jamen hvad er ordet for at call'e. Jeg har skrevet:

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.checked);


}


Det er meget grundlæggende, men der er ikke noget call. Du skriver metodenavnet og parameterne og så kalder den metoden. F.eks.

if (checkBox1.checked)
Resize(filnavn, 800, 800);
else
HentOriginal();

Men kig på Sørens løsning. Det må være den rigtige her.



Jamen hvad er ordet for at call'e. Jeg har skrevet:

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.checked);


}


Det er meget grundlæggende, men der er ikke noget call. Du skriver metodenavnet og parameterne og så kalder den metoden. F.eks.

if (checkBox1.checked)
Resize(filnavn, 800, 800);
else
HentOriginal();

Men kig på Sørens løsning. Det må være den rigtige her.


Hej allesammen tak for svarene. Som sagt er jeg ny, og der er stadig ting jeg ikke forstår:

Har skrevet Søren's event handler kode, får ikke mindre en 9 fejl. Er i tvivl om hvor hans første kode skal stå.

Error 1 Only assignment, call, increment, decrement, and new object expressions can be used as a statement

Error 2 Only assignment, call, increment, decrement, and new object expressions can be used as a statement

Error 3 'System.Windows.Forms.PictureBox' does not contain a definition for 'Sizemode' and no extension method 'Sizemode' accepting a first argument of type 'System.Windows.Forms.PictureBox' could be found (are you missing a using directive or an assembly reference?)

Error 4 Identifier expected; 'checked' is a keyword

Error 5 Invalid expression term ')'

Error 6 { expected

Error 7 ; expected

Error 8 Invalid expression term 'else'

Error 9 ; expected

Nogen der kan fikse det her?
Er virkelig glad for det her forum nu:)







Skriv hele din kode her, så vi kan se hvad du har skrevet ;-) Og husk at pakke det ind i udvikleren.dk's kodeboks så vi ikke skal scrolle 100 km ned :-)



checked med lille 'c' er et nøgleord i C#. Den property der angiver om feltet er afkryset er Checked med stort C.

Jeg lavede lige et lille forms projekt. Smed en checkbox og en picturebox ind. Dobbeltklikkede på Checkboxen og på selve Form'en. Og tilføjede så til deres event handlers så det ser sådan her ud:
Fold kodeboks ind/udCSharp kode 


Her har jeg smidt den "første kode" i min Load event handler. Men for dig afhænger det af hvornår du vil have dit billede vist. Men pointen i bund og grund var at du behøver ikke selv lave kode til at bevare aspect ratio fordi det kan pictureboksen selv gøre ved at du sætter dens SizeMode til Zoom.



Indlæg senest redigeret d. 13.06.2011 18:59 af Bruger #14645
Fold kodeboks ind/udCSharp kode 


Det er vist det. GenerateThumbnail er min gamle "Resize'er" den skal vel sikkert fjernes nu eller hvad?



Fold kodeboks ind/udCSharp kode 


Det er vist det. GenerateThumbnail er min gamle "Resize'er" den skal vel sikkert fjernes nu eller hvad?


Jeps, din egen metode er ikke nødvendig længere. Og så er checked forkert. Det skal være med stort C - altså Checked. Så vil det compilere :-)



<< < 12 > >>
t