|
If you're looking at the various ways to create immutable classes, you might be interested in Jon Skeet's recent NDC video:
The changing state of immutability C# - Jon Skeet on Vimeo[^]
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Extremely interesting video from the person I consider a "guru's guru" of .NET (along with Eric Lippert, Marc Gravell, and a few others).
thanks, Bill
«In art as in science there is no delight without the detail ... Let me repeat that unless these are thoroughly understood and remembered, all “general ideas” (so easily acquired, so profitably resold) must necessarily remain but worn passports allowing their bearers short cuts from one area of ignorance to another.» Vladimir Nabokov, commentary on translation of “Eugene Onegin.”
|
|
|
|
|
I am try main first game, and have problem with terrain creatin. When i am load and use large texture is ok, when i am moving in game crash program with this message:
System.OutOfMemoryException: Out of memory.
at System.Drawing.Image.FromFile(String filename, Boolean useEmbeddedColorManagement)
at System.Drawing.Image.FromFile(String filename)
at sls.go.GoPaint(Object sender, PaintEventArgs e) in c:\Users\Jozef\Documenty\SharpDevelop Projects\sls\sls\go.cs:line 93
at System.Windows.Forms.Control.OnPaint(PaintEventArgs e)
at System.Windows.Forms.Form.OnPaint(PaintEventArgs e)
at System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer)
at System.Windows.Forms.Control.WmPaint(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.ContainerControl.WndProc(Message& m)
at System.Windows.Forms.Form.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Here is source code:
using System;
using System.Drawing;
using System.Windows.Forms;
using PlaySound;
using System.Drawing.Drawing2D;
namespace sls
{
public partial class go : Form
{
public go()
{
InitializeComponent();
}
int RotatePlayerinfo = 0;
int TempMatrixX = 0;
int TempMatrixY = 0;
bool left;
bool right;
bool up;
bool down;
void GoLoad(object sender, EventArgs e)
{
this.Cursor = Cursors.Cross;
this.ControlBox = false;
this.WindowState = FormWindowState.Maximized;
this.DoubleBuffered = true;
Refresh.Interval = 50;
Refresh.Enabled = true;
PlayerInfo.Interval = 500;
PlayerInfo.Enabled = true;
PlayerMoving.Interval = 50;
PlayerMoving.Enabled = true;
this.Paint += new PaintEventHandler(GoPaint);
}
void GoKeyDown(object sender, KeyEventArgs e)
{
if ( e.KeyCode == Keys.Left ) { left = true; }
if ( e.KeyCode == Keys.Right) { right = true; }
if ( e.KeyCode == Keys.Up ) { up = true; }
if ( e.KeyCode == Keys.Down ) { down = true; }
}
void GoKeyUp(object sender, KeyEventArgs e)
{
if ( e.KeyCode == Keys.Left ) { left = false; }
if ( e.KeyCode == Keys.Right) { right = false; }
if ( e.KeyCode == Keys.Up ) { up = false; }
if ( e.KeyCode == Keys.Down ) { down = false; }
}
void GoPaint(object sender, PaintEventArgs e)
{
Image terrain = Image.FromFile(@"object\terrain.bmp");
e.Graphics.DrawImage(terrain, TempMatrixX, TempMatrixY);
Image player = Image.FromFile(@"object\player1.png");
e.Graphics.DrawImage(player , 0, this.Height - 130, 100 , 100);
}
void RefreshTick(object sender, EventArgs e)
{
this.Refresh();
}
void PlayerInfoTick(object sender, EventArgs e)
{
RotatePlayerinfo++;
}
void PlayerMovingTick(object sender, EventArgs e)
{
this.Text="Terrain X:"+TempMatrixX+" Terrain Y:"+TempMatrixY;
if ( TempMatrixX > -1 ) { TempMatrixX = -1; }
if ( TempMatrixY > -1 ) { TempMatrixY = -1; }
if ( up == true ) { TempMatrixY++; }
if ( down == true ) { TempMatrixY--; }
if ( left == true ) { TempMatrixX--; }
if ( right == true ) { TempMatrixX++;}
}
}
}
Can you please help fix this bug. Thx
|
|
|
|
|
Not in the least surprised, to be honest.
Start by not creating huge numbers of Images.
Because you add your handler to teh Paint event:
this.Paint += new PaintEventHandler(GoPaint); Every time you move it will get called. And what does it do?
void GoPaint(object sender, PaintEventArgs e)
{
Image terrain = Image.FromFile(@"object\terrain.bmp");
e.Graphics.DrawImage(terrain, TempMatrixX, TempMatrixY);
Image player = Image.FromFile(@"object\player1.png");
e.Graphics.DrawImage(player , 0, this.Height - 130, 100 , 100);
} Loads two images from files and draws them.
Start by moving those loads out of the paint handler and into the Load event handler via private member variables and use those in your paint event. See what happens.
If that fixes it - and it's quite likely it will - handle the paint event and move your code into that instead of adding a second handler to the chain. It's a lot more obvious to readers what is going on.
And...if that terrain image is the whole background the user is moving across, then I'd strongly suggest you look at redrawing a small part of a move instead of invalidating the whole image and redrawing the lot - it's going to get very slow, very quickly once you have more than one moving object. And it's going to flicker horribly!
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
THX, i am fix this problem with partly loading images.
|
|
|
|
|
Hi guys,
I need to write code that verifies an inf and creates a .Cat file something similar to what inf2cat tool does in the WDK.
Does anyone have a clue of which class can accomplish this irrespective of .NET version.
Googled but not much info about this.
Thanks in advance.
|
|
|
|
|
there is nothing in the .Net Framework to do as you suggest - the Windows driver handling 'routines' are at a lower level than than the Framework - so anything available you would have to use P/Invoke to get to it (I am thinking of the setupapi here as the likely candidate)
why are you re-inventing the wheel anyway - if you need to do this from a process, can you not run a process (from System.Diagnostics) to 'spawn' inf2cat & trap/analyse the output ?
if you have no other way, this link alludes to some perl scripts that 'may' if you can find/download them provide a starting point for understanding INF files ChkINF - Windows 10 hardware dev[^] ... all I can say beyond here is 'good luck'
|
|
|
|
|
Thanks for the input and link I was hoping there was an easier way. I might have to stick to P/invoke with this one.
|
|
|
|
|
Is it possible to detect the encoding of each txt file what you import into textBox1.
For example:
If you import a txt file in textBox1 ...
label1.Text = "Windows 1250 - ANSI"; or label1.Text = "Windows 1251 - ANSI" or label1.Text = "UTF-8" ...
If it is possible how to do it, and if it is not possible I apologize. Thank you.
|
|
|
|
|
You might be interested in chardetsharp, which is a .NET port of Mozilla's charset detector.
GitHub - superstrom/chardetsharp[^]
The quick brown ProgramFOX jumps right over the Lazy<Dog> .
|
|
|
|
|
I think that what I wanted was still complicated for me. Thank you.
|
|
|
|
|
|
Code is as following..I am starting some application and triying to write a username into textbox.Unfortunately,FindWindowEx can not get correct handle because target application takes some time to start.How can wait for the application to get correct handle to textbox? WaitForInputIdle doesn't work since program maintains a login window.
Thanks in advance
[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName);
[DllImport("user32.dll")]
public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, uint uMsg, IntPtr wParam, string lParam);
const int WM_SETTEXT = 0X000C;
private void button1_Click(object sender, EventArgs e)
{
Process p = Process.Start("SomeApp.exe");
IntPtr AppTextBox = IntPtr.Zero;
int i = 0;
do
{
AppTextBox = FindWindowByCaption(IntPtr.Zero, "SomeApp");
i++;
} while (AppTextBox.ToInt32() == 0);
Thread.Sleep(4000);
AppTextBox = FindWindowEx(p.MainWindowHandle, IntPtr.Zero, "Edit", null);
SendMessage(AppTextBox, WM_SETTEXT, IntPtr.Zero , "Success!");
}
modified 8-Feb-16 16:28pm.
|
|
|
|
|
EDIT:
How are you calling WaitForInputIdle ? You are supposed to supply a milliseconds argument to tell it how long to wait.
What does this loop do?
IntPtr AppTextBox = IntPtr.Zero;
int i = 0;
do
{
AppTextBox = FindWindowByCaption(IntPtr.Zero, "SomeApp");
i++;
} while (AppTextBox.ToInt32() == 0);
The difficult we do right away...
...the impossible takes slightly longer.
modified 8-Feb-16 17:33pm.
|
|
|
|
|
Richard Andrew x64 wrote:
How are you calling WaitForInputIdle ? You are supposed to supply a milliseconds argument to tell it how long to wait.
I know I have to supply a time value in milisecond when using WaitForInputIdle Richard.But I didn't added to code since it doesn't do the job.
Richard Andrew x64 wrote: IntPtr AppTextBox = IntPtr.Zero;
int i = 0;
do
{
AppTextBox = FindWindowByCaption(IntPtr.Zero, "SomeApp");
i++;
} while (AppTextBox.ToInt32() == 0);
With this code above,I tried to wait until SomeApp finished its loading.But this code returns a arbitrary handle and so doesn't work.I thought it may have helped waiting for username login window.
Thank you
|
|
|
|
|
sugarpasa wrote: But I didn't added to code since it doesn't do the job.
That's not specific enough. What exactly happens?
The difficult we do right away...
...the impossible takes slightly longer.
|
|
|
|
|
Process p = Process.Start("SomeApp.exe");
IntPtr AppTextBox = IntPtr.Zero;
p.WaitForInputIdle(4000);
AppTextBox = FindWindowEx(p.MainWindowHandle, IntPtr.Zero, "Edit", null);
SendMessage(AppTextBox, WM_SETTEXT, IntPtr.Zero , "Success!");
|
|
|
|
|
|
Richard Andrew x64 wrote: You can use WaitForInputIdle() to wait for the process to come up, then enumerate the child windows of the main window handle to find the login window.
Can you give me some code snippet to give me an idea please.
Thank you
|
|
|
|
|
There's plenty of code at the link I gave you. I can't write your code for you, c'mon.
The difficult we do right away...
...the impossible takes slightly longer.
|
|
|
|
|
Richard Andrew x64 wrote: There's plenty of code at the link I gave you. I can't write your code for you, c'mon.
Yeah right.That's unfair asking something like that I just can't figure out how to make a start.if I wait for some time with WAITFOR... .Everything is fine.Nevertheless I have to wait some more second to carry on
|
|
|
|
|
After the program waits for WAITFOR, then take the main window handle of the process and enumerate all child windows until you find the Login window.
You could do it asynchronously by using a .NET Timer class: After waiting for WAITFOR, set the timer for a few seconds, then when the timer elapses, you can enumerate the child windows. I don't see that there is any way your program can know exactly when the Login window is shown.
If you need help with the Timer class, I'm sure people would be glad to help with specific questions.
The difficult we do right away...
...the impossible takes slightly longer.
|
|
|
|
|
Hello,
How will I be able to scan the qr image in c# WF? Is that posible? If it is, how will I do that? Is anyone made this already?
Thanks,
Jan Irvin Fabon
janirvinfabon@gmail.com
|
|
|
|
|
1) Never post your email address in any forum, unless you really like spam! If anyone replies to you, you will receive an email to let you know.
2) Google is your friend: Be nice and visit him often. He can answer questions a lot more quickly than posting them here...
A very quick search gave 182,000 hits: scan the qr image in c - Google Search[^]
The top hit is an article on this site!
In future, please try to do at least basic research yourself, and not waste your time or ours.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
If by "WF" you mean WinForms: It's not related. You could also implement it in a console application.
I assume you don't want to use a QR/Barcode-Scanner for that, otherwise it would be trivial.
So first you have to get the image somehow into your application. How exactly will depend on the device you'll be using for this: webcam / mobile phone / XY. This still isn't related to QR code recognition - so decide on some device and look for a solution on how to get the image into your application.
Then you'll need to process the image and recognize the QR code. There are several open source solutions available, take a look:
Open Source QRCode Library[^]
Capture QR code in Windows 8.1 using CaptureElement sample in C#, XAML for Visual Studio 2013[^]
ZXing.Net - Home[^]
Barcode Scanner - Home[^]
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
|
|
|
|