|
Marc Clifton wrote:
there's nothing about C#/.NET that would make it any less expensive to rewrite, retest, re-screw up.
That's 100% correct.
Promise only what you can do. And then deliver more than what you promised. This signature was created by "Code Project Quoter".
|
|
|
|
|
Yep, I agree with Heath. Don't move it when it alreay works. If something needs a complete rewrite then thats not so bad, but otherwise keep maintaining it as is.
The question your boss probably wants to ask is why would I want to use C# over C++ in new projects, and are their scenarios where one is better over the other.
"Je pense, donc je mange." - Rene Descartes 1689 - Just before his mother put his tea on the table.
Shameless Plug - Distributed Database Transactions in .NET using COM+
|
|
|
|
|
Hello,
I set the BackgroundImage of my form to a bmp. Now, when I resize the form, I would like the background image to scale in size accordingly, so that when the from gets smaller the image shrinks.
Right now, when I resize the form, the image just gets cut off.
Any suggestions?
Thanx,
-Flack
|
|
|
|
|
You could either override the OnPaint method and scale and draw your background image before calling base.OnPaint , or override the OnResize method and scale the image, setting it as the new BackgroundImage . In the latter case, you'll have to create a Graphics using CreateGraphics in your form and call somethig like Graphics.ScaleTransform (which you could use in the override for OnPaint as well).
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
I was trying to limit some permissions on what certain methods can and cannot access. I wanted to disallow certain methods from accessing files. I found the FileIOPermissionAttribute , this seemed exactly what I wanted. But alas, if I use this attribute I cannot call showdialog on a form object.
[FileIOPermission(SecurityAction.PermitOnly)]
private void button1_Click(object sender, System.EventArgs e)
{
Form2 fm = new Form2();
fm.ShowDialog();
}
The exception text:
An unhandled exception of type 'System.Security.SecurityException' occurred in mscorlib.dll
Additional information: Request for the permission of type System.Security.Permissions.UIPermission, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 failed.
Can anyone explain why a UIPermission exception is thrown?
-Nathan
---------------------------
Hmmm... what's a signature?
|
|
|
|
|
Because you're granting permissions ONLY for the FileIOPermission, not the UIPermission which Form.ShowDialog requires.
If you're new to .NET code access security, "UB" has an excellent article here on CodeProject, Understanding .NET Code Access Security[^]. You should also see the reference, Code Access Security[^], in the .NET Framework SDK.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Is there and easy way to deny access to all files, but still allow UI to be presented to the user?
Basically I am helping to develop a plugin architecture and we need to disable file access and possibly even socket access. So I was looking for something along the lines of:
filePerm.DenyAllAccess();
sockPerm.DenyAllAccess();
myPlugin.DoSomethingClever();
sockPerm.RevertDeny();
filePerm.RevertDeny();
<br />
<br />
Thanks,<br />
Nathan <br />
<br />
---------------------------<br />
Hmmm... what's a signature?
|
|
|
|
|
Typically, it's not your code's responsibility. That's what permissions sets that code groups use are for.
I don't see why you're trying to do this like you are. If a plugin calls your method, your method was written by "you" (possibly an org.) so you ultimately control what goes on in there. If you don't use files or sockets, how is a plugin supposed to change that?
Now, if you wanted to make sure that your application had certain permissions but plugins were more restricted, you should consider using a code group based on the strong name of your assembl(y|ies). With real-world applications, you should always sign your assemblies for added benefit, like the ability to be installed into the GAC, to be used by other strong-name assemblies, etc. Use the AssemblyKeyNameAttribute or the AssemblyKeyFileAttribute with a file generated by "sn.exe -k KeyFile.snk", which generates a key pair. Use this for all of your assemblies (putting it in a container with "sn.exe -i MyContainerName KeyFile.snk" and using the AssemblyKeyNameAttribute is often easier with large projects).
If you call one of your plugin methods as you do above, you have a number of things to consider. First, do you even trust the plugin? Perhaps checking the public key token and making sure it's the same as yours or another trusted source would be a good idea. If you want anyone to be able to extend your application, then you're on the right track. Create an instance of the permission(s) and call Deny on the instance. This also means that if callers higher in the stack are trying to access a resource, they won't be able to but a SecurityException will be thrown by callees lower in the stack when a Demand for that permission occurs.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Heath Stewart wrote:
If you want anyone to be able to extend your application, then you're on the right track. Create an instance of the permission(s) and call Deny on the instance.
I would like others to develop plugins so that is why I wanted to deny things around the method calls into that plugin. I don't want plugins to be able to do anything evil and such to the user's computer or via the user's computer. The plugin should get all information from the program and that is it.
I have found this to work around the method declaration of the abstract plugin methods.
abstract class plugin
{
protected abstract void OnDoSomething();
[FileIOPermission(SecurityAccess.Deny,Unrestricted=true)]
public void DoSomething()
{
OnDoSomething();
}
}
This will stop file accessing. But I found that the plugin derived from this can just do an FileIOPermission.Assert to get around this. Maybe I am thinking too much and there is no truly safe way to do these plugins.
Maybe at some point I have to trust my users...
Thanks again,
Nathan
---------------------------
Hmmm... what's a signature?
|
|
|
|
|
The assert only works if the code that is asserting that permission was granted that permission (not taking callers higher in the stack into account). Again, this comes down to effective management of permission sets and code groups. That's the only true way to limit it.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Thanks for all your help. I will just have to deal with them having the ability to Assert to get around it. I think it will stop most people from doing anything stupid... but it won't stop true hackers.
Thanks again,
Nathan
---------------------------
Hmmm... what's a signature?
|
|
|
|
|
Any suggestions on how make a simple user control function as if it were a container control?
This is what I'm doing:
1) Create a simple usercontrol and change its backcolor to something other than gray.
2) Build the usercontrol.
3) Open a windowsapplication project and add a form.
4) Right click on the toolbox and click on add/remove items and
add the usercontrol that was built from step 2.
5) Drag & drop the user control onto the form.
6) Drag & drop a checkbox onto the user control.
7) Select the user control and drag it to another location on the form.
This is where my problem shows itself...The checkbox doesn't move with the usercontrol.
Does anyone know how I can resolve this?
Thanks,
Dave
|
|
|
|
|
you have to apply a new "designer" to your control.
something like
[Designer(typeof(paneldesigner))]
public class mycontrol:usercontrol
{
...
//Roger
|
|
|
|
|
Roger-
Thanks for pointing me in the right direction...The following is what I was missing...I actually found it under an artical by Iridar on this website...
// give the control a designer category, to ensure design-time compatability
[DesignerCategoryAttribute("Component")]
// makse sure we can add child controls at runtime
// see Microsoft Knowledge Base Article - 813450
[Designer("System.Windows.Forms.Design.ParentControlDesigner, System.Design", typeof(IDesigner))]
Thanks,
Dave
|
|
|
|
|
Can anyone tell me how I would go about getting the Author, Name, Dimensions, Duration, Bit Rate, etc... attributes of a Windows Media Video file (I have encoded the files myself so I know they are there) I have looked at FileInfo but that does not give me video specific information. Any help is welcomed.
Thanks.
Matt Newman
|
|
|
|
|
FileInfo only gives information about the file as the file system knows it. Those values are stored in a separate stream within the file. To get that kind of information, you should take a look at the Windows Media SDK[^].
You can also use "COM way" where you get an IPropertySetStorage pointer to the file using StgOpenStorageEx . You then enum the IPropertyStorage items and get properties that way. This is what Windws 98 and higher, and Windows 2000 and higher do for every file. Some file types - like Office documents and many media file types - provide their own implementations that still use this mechanism. If you have COM experience, this shouldn't be too hard.
For more information, see the documentation for IPropertySetStorage , IPropertyStorage , and StgOpenStorageEx in the Platform SDK.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Hi All,
I am stuck at some point in implementing checkbox column in datagrid.
This is how I am adding checkbox column to the DataGridTableStyle.
DataGridColumnStyle boolCol = new DataGridBoolColumn();
boolCol.MappingName = "PrimaryFlag";
boolCol.HeaderText = "Primary";
((DataGridBoolColumn)boolCol).TrueValue = "true";
((DataGridBoolColumn)boolCol).FalseValue = "false";
((DataGridBoolColumn)boolCol).ReadOnly = false;
boolCol.Width = 40;
ts.GridColumnStyles.Add(boolCol);
And from database I am receiving "true" or "false" values in the PrimaryFlag column. When I set the datasource of datagrid with the dataset that I receive from database, it correctly sets the checkboxes as checked or unchecked based on "true" or "false" values in the PrimaryFlag column.
Now my question is how can I handle the event such that with one click on the checkbox column it should toggle the check value of column. Right now it requires 2-3 clicks to toggle.
Any comments are very appreciated.
Thanks
Ruchi
|
|
|
|
|
First, declare your variable as a DataGridBoolColumn instead of a DataGridColumnStyle . You can then avoid expensive cast operations and can still add it to the DataGridTableStyle.GridColumnStyles collection property because it's still a DataGridColumnStyle object (from which it inherits).
Set AllowNull to false (the default) and make sure that none of your rows contains a NULL value for that column. If they do, the DataGridBoolColumn will automatically draw a tri-state combo box. In most cases with boolean columns in a database it's best to define a default and not allow nulls anyway - it saves you from having to check for null values since - when converting to a bool - value types cannot be null .
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
hi, im new in c# is it posible to print colored lines or move cursor in console??
thanks!!
|
|
|
|
|
Not using the base class library (the .NET Framework assemblies), not until .NET 2.0 that is. There are ways to accomplish this by P/Invoking the write native APIs. See the article Console Enhancements[^] here on CodeProject for details.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
|
Hi everybody,
I've created one setup program on visual studio .net 2003 and the framework is ver 1.1, the problem is when i want to run my Setup.MSI file on the older version of framework (1.0) then it fails and alerts me to upgrade to 1.1 version. i have't any custom action programmed in that setup file as well.
i though this setup program (msi file) is something independent from .net and framework and msi file is windows standard,.....
anyways any clue?...
thanx in advance
|
|
|
|
|
When you create an MSI package using Visual Studio .NET and include assemblies in your package, VS.NET automatically adds a launch condition which you could delete by selecting the project and clicking the appropriate toolbar icon in the Solution Explorer.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
I have created a project with several forms and a main menu form. On the forms, I have placed six different user controls. Then I converted the project to MDI. The main menu form has IsMDIContainer is set to true. On the child forms, the MdiParent has a reference to the parent form. When i run the program, the textcolor of the text in labels and buttons is the same as the backgound color (or the text appears to be missing). When i remove the reference to the parent form and run the program, the color of the foreground and backgound return to the colors set in the properties. What can i do to prevent this problem?
Thanks in advance
bob
|
|
|
|
|
Unless you're explicitly setting the BackColor and ForeColor properties to something other than the default, these controls use ambient properties of the parent. It would seem, then, that somewhere in one of the parent controls you're setting BackColor and ForeColor to the same Color value. Is this correct?
Microsoft MVP, Visual C#
My Articles
|
|
|
|