|
I read your reply, and installed sharpshell on my c# project, but I still don't know how to use sharpshell deskbands.
Could you please give me an example or a tutorial on how to create a deskband using sharpshell?
Thanks.
|
|
|
|
|
There's a DeskBand-Sample in the SharpShell-Project. Have you looked at it?
|
|
|
|
|
manchanx wrote: Have you looked at it?
What do you think?
The difficult we do right away...
...the impossible takes slightly longer.
|
|
|
|
|
Richard Andrew x64 wrote: What do you think? I hope he's seen my comment and is looking at it right now
|
|
|
|
|
I just looked at it, but I don't know how to implement it on my app.
I tried to instantiate the class, by doing:
DeskBandUI db = new DeskBandUI();
db.pb.ForeColor=Color.Green;
I also don't know how to display the deskband in the takbar since my main app is a form.
Thanks.
|
|
|
|
|
Take a look at the sample: DeskBandUI is just the UserControl that is being used by WebSearchDeskBand. So you would have to instantiate WebSearchDeskBand instead.
Additional hints:
- Instantiating the class isn't enough to get it working. You have to register a "COM Server" for which there's the "ServerRegistrationManager" in the SharpShell-Project, but I'm unable to give you instructions for that. The author of SharpShell has several articles[^] here on CodeProject documenting SharpShell, unfortunately the DeskBand seems to be the only aspect of it for which there's no article, but maybe it helps with the ServerRegistrationManager and with the general understanding of ShellExtensions.
- As of Windows 7 DeskBands are no longer recommended by Microsoft. They still work on Windows 7 but I don't know about Windows 8, even less Windows 10.
(edit: )
- I just found another Codeproject article[^] on DeskBands - it's REALLY old but in the comments I found someone saying that he got it working under Windows 7. Maybe the approach taken there is a simpler one than with SharpShell.
modified 7-Mar-15 18:39pm.
|
|
|
|
|
im using if statment and in this Cmboboxtype.SelectedIndex ==0 shwing an error (Warning 2 Possible unintended reference comparison; to get a value comparison, cast the left hand side to type 'string')
Hide Copy Code
if (txtBoxQuestion.Text == "" || txtbxchoice1.Text == "" || txtbxchoice2.Text == "" || txtbxchoice3.Text == "" || txtbxchoice4.Text == "" || Cmboboxtype.SelectedIndex ==0)
{
MessageBox.Show(" Please Fill All TEXT BOXES");
}
|
|
|
|
|
You should use the IsNullOrEmpty method[^] to test your strings. I cannot see what is wrong with the final test. Are you sure you copied that exactly as is from your source?
|
|
|
|
|
As Richard says, the code you show does not generate that error: so it's likely that you have a typo in your actual code. Try copying it directly from Visual Studio into your question.
And Richard is also right that you shouldn;t check strings like that, but you may find that string.IsNullOrWhiteSpace[^] is better that IsNullOrEmpty - it insists on non-blank entries, which means it also excludes just spaces.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
OriginalGriff wrote: string.IsNullOrWhiteSpace Thanks, I hadn't known about that one. Maybe I should read the documentation.
|
|
|
|
|
It was introduced at V4.0 - and was one of the reasons I upgraded to VS2010 from VS2008!
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
That suggests to me that you always read the documentation.
|
|
|
|
|
Not so: in this case I think Luc pointed it out to me a number of years ago - and he does read the documentation, because I know he is still using VS2008 today!
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
One thing you need to consider is that a Warning is not an Error in your code. It is what compiler believes should be done to make your code better. So, there is no error in your code and it should compile and execute.
The sh*t I complain about
It's like there ain't a cloud in the sky and it's raining out - Eminem
~! Firewall !~
|
|
|
|
|
Um...I'd disagree with you there, particularly with beginners.
Modern compilers are pretty damn good: if they flag something up as a warning, it normally means that you have done something wrong, and your code won't work as you expect:
if (a == b);
c(); Is a warning in C#...
In this case, a "Possible unintended reference comparison" warning normally means that you are comparing the item instead of it's property or some such - and that your code won't work.
These kind of problems can be extremely difficult to spot without the warning: you tend to read what you meant to write, so you mentally fill in the missing bit and it takes a long time to work out.
The "extra semicolon" error and the "but I meant a comparison" error in C could take hours to work out because the older compilers didn't even consider them worth a warning!
if (a = b) ... When you meant to write
if (a == b) ...
[edit]Typos![/edit]
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
Well, I do not have that much knowledge about compilers, how objects are created in low-level programming languages, in high-level programming languages, an object can be created as simple as,
var name = "Hello world!";
And one doesn't even have to know what the object type is, where it is stored, how it is stored and so on. But, one thing that I do know is that a Warning shows bad code, not wrong code. There is a difference between them both, a bad code means that there is some sort of problem with the code which can be made better; e.g resources not called dispose or close function upon and so on.
Now coming to your claims, you said this code would throw warning,
if (a == b);
c();
But you didn't tell what type these objects hold. Are they strings, integers or a class object and so on. Also, there would again be a problem, the c, being static or not and so on. Now, let me talk about this scenario in a way, have a look at the following code,
using System;
public class Program
{
public static void Main()
{
string a = "", b = "";
if(a == b) {
new Program().c();
}
}
void c() {
Console.WriteLine("Hello world");
}
}
The output of this code in the Console was, "Hello world". And the only warning that I got was on the line System.Collections.Generic, I didn't remove it because I was working on something in that fiddle[^].
What I believe is, that that would never throw an error, unless you, yourself compare objects of different type where a casting would give good results; good code.
I didn't bother trying to notice that semi-colon mistake of yours Griff, because I know you intended to write that, on purpose, to make sure I get a sense of wrong code, which I did! You succeeded.
The last thing there about the equality check or assignment operator, if someone has basic idea of these operators, he would never write equality check in a way someone would assign the value. If someone, by mistake does write the code in this way, I believe he doesn't even know the basics of operators in C# and he should learn them before doing anything at all.
Once again, I would say, a warning is compiler telling you that the source code would compile fine, would execute, but wait... you can write it this way to make it a better code. But I still want to know where I am wrong so that I can learn something.
Well, I hope that was not a lot for you to read. hehe
The sh*t I complain about
It's like there ain't a cloud in the sky and it's raining out - Eminem
~! Firewall !~
|
|
|
|
|
Afzaal Ahmad Zeeshan wrote: Now coming to your claims, you said this code would throw warning,
if (a == b);
c();
But you didn't tell what type these objects hold. Are they strings, integers or a class object and so on. Also, there would again be a problem, the c, being static or not and so on. Now, let me talk about this scenario in a way, have a look at the following code,
And there, in a nutshell, is the reason why warnings are significant.
The problem is nothing to do with the type of the object, the static or instance access to the method.
The problem is that the if is terminated by the semicolon at the end of the line, so the "c" method is always called regardless of the values in a and b...and it's a bugger to see - even when you know something is wrong.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
Well I agree that semi-colon error is a problem for creating empty statement because there is no need of curly brackets, that is why I always prefer using curly brackets to save myself in these scenarios.
The sh*t I complain about
It's like there ain't a cloud in the sky and it's raining out - Eminem
~! Firewall !~
|
|
|
|
|
if (a == b);
{
c();
}
|
|
|
|
|
Curly brackets won't save you from that, they save you from this:
if (a == b)
c();
d();
if (a == b)
{
c();
d();
} And that is why I also always use brackets, even for a single line of code!
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
Yes, I was talking about using curly braces for code blocks, not to avoid the semi-colons.
The sh*t I complain about
It's like there ain't a cloud in the sky and it's raining out - Eminem
~! Firewall !~
|
|
|
|
|
Sometimes I wish there were an "Option Strict" compiler directive equivalent in C# to force having to declare the access modifier for every variable, prohibit use of 'var (except in special cases like with using 'dynamic, or the intermediate results of Linq queries, anonymous types, etc.), and require {} for every if/if-else block.
Why ? Because a lot of the coding mistakes I see with beginning students result from the "freedom" that C# does "give you" in writing code, and I think writing more verbose code that is "strict" is a good habit to learn ... in the beginning.
Now truly descriptive naming conventions ... oh, well, don't let me get started on that; I've already been accused of being a speed-typing chauvinist
In practice I find using ReSharper automates some of these guidelines for me quite nicely, but, of course, not everyone can afford to license it.
«To kill an error's as good a service, sometimes better than, establishing new truth or fact.» Charles Darwin in "Prospero's Precepts"
|
|
|
|
|
Absolutely!
I hate var except where it's actually needed: Linq
What would be nice is a "autoconvert" option where you type
var x = ... and VS sorts out the context and if it can replaces it with the full type defintion:
Dictionary<Guid, MyClass> x = ... so they can't even complain about the extra time it takes to type it! Needless to say, it should default to "On" and be hard to find...
My default projects are modified VS templates, which include "Warning level 4" and "Treat all warnings as errors" to make sure I can't get it wrong (or miss out on the XML documentation, since it won't compile without public method headers)
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
One comment on your use of ComboBox.SelectedIndex == 0 : if SelectedIndex is zero that indicates that the first Item in the ComboBoxItems collection is selected.
You probably want to test for -1, which indicates no selection has been made. Of course, if you know the selection index in advance at the time you present the Form to be filled out to the end-user, this is irrelevant.
Also, note that with the (WinForms) ComboBox:
"SelectedIndex, SelectedValue, and FormattingEnabled are related as follows:
If FormattingEnabled is false, SelectedIndex will not be set to -1 when SelectedValue is blank.
If FormattingEnabled is true, SelectedIndex will be set to -1 when SelectedValue is blank."
Also note: "To deselect the currently selected item, set the SelectedIndex to -1. You cannot set the SelectedIndex of a ComboBox item to -1 if the item is a data-bound item." [^]
«To kill an error's as good a service, sometimes better than, establishing new truth or fact.» Charles Darwin in "Prospero's Precepts"
|
|
|
|
|
For a source code, can be in the program, click on an empty control, appeared 8 designer as frame dragging with the mouse to change the size of the box, and can drag, select multiple controls, imitate the form designer.Thank you
|
|
|
|
|