|
|
Hi,
I would like to edit a Excel TextBox using C#. I have done the selection using the following code:
((Excel.Shape)xa.ActiveWorkbook.ActiveSheet).Select("txtViews");
Next I want to edit the text in the TextBox. How do I do that? Any help would be highly appreciated.
Thanks,
Manish
|
|
|
|
|
I'm trying to pick out individual cells in an xml document that has been created from an excel spreadsheet. The problem is that when a cell value is missing in the spreadsheet xml does not add a null value node to take the place of this, thus putting the xml out of synch - that is, what should be the 5th node in a row is now the 4th.
Does anybody know how to get around this? The only thing I can see extra in the xml is a new attribute ss:Index="5" for the cell after the one that has been missed.
wend
|
|
|
|
|
Use the attribute, then. Since you obviously already know the number of cells that should exist, you can author your loop so that if the ss:Index qualified attribute (don't forget about the XmlNamespaceManager ) does not equal the current index in your loop, use continue (or just don't execute code a la your condition).
If you feel this is problematic, I suggest posting to the appropriate Office newsgroups on news://msnews.microsoft.com. Microsoft developers keep an eye on those and a discussion may already exist about that problem since I doubt it's uncommon.
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles]
|
|
|
|
|
Anyone recommend a good component to sync a sql database to Outlook's contacts/tasks/events? Intellisync looks great, but $50K(!) is a bit steep.
Thanks!
Chris
|
|
|
|
|
This forum is for questions regarding C#. You might try and lounge.
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles]
|
|
|
|
|
I'm trying to access C# object as COM object in C++ and I generate TLB file and use
#import in C++, but I'm having a bit of problems with return types.
For example if have method:
string GetValue()
the generated interface (*.tlh file) gets translated to:
virtual HRESULT __stdcall GetValue (/*[out,retval]*/ BSTR * pRetVal ) = 0;
the return argument always gets put as last parameter.
All the example I've seen (in books or MSDN) do not do that. They always return whatever is returned.
Is there maybe some attribute I have to apply? I'm using VS2005, so maybe it's new behaviour there?
Thanks.
|
|
|
|
|
This is the documented and expected behavior. All COM methods (and, by extension, properties) are supposed to return HRESULT s (as yours does), and what COM clients like VB and .NET via COM interop see is return values (although in .NET you can attribute your methods with PreserveSigAttribute - among other ways - to make sure an HRESULT is returned as an Int32 since the return result code might be important and may not be an error (like S_FALSE ).
I recomend that you read Creating a CCW for COM enabled non .NET applications[^] here on CodeProject, as well as Exposing .NET Framework Components to COM[^]. Make sure that you hard-code GUIDs with the GuidAttribute and never change published interfaces (i.e., interfaces you've released unto the world). Always derive new ones. Also never use auto-generated class interfaces. Define your interfaces explicitly and implement your class interface as the first interface in your implementation list.
Also, what examples are you looking at? I've read about every article and API doc in MSDN and COM methods are all return HRESULT s or SCODE s (legacy) - it's part of the COM spec to do so. VB (pre-.NET) interprets [retval] s as return values, just like tlbimp.exe and VS.NET do when importing a typelib. Other late-bound clients like Windows Script (VBScript, JScript) do so as well.
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles]
|
|
|
|
|
|
You're actually supposed to use the PreserveSigAttribute when you do this. Some times the samples are incorrect. Try compiling the following:
using System;
using System.Runtime.InteropServices;
[assembly: ComVisible(true)]
[assembly: Guid("519a4822-f224-47fa-bdc7-8037829365dc")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[Guid("f9b77b61-b4f0-4be4-9c53-ded9592e90c6")]
public interface ITest
{
[DispId(0)]
int Foo(string value);
}
[ClassInterface(ClassInterfaceType.None)]
[Guid("ae5e53c8-54d6-4667-9396-582f5c8611bf")]
public class Test
{
public int Foo(string value)
{
return value.Length;
}
} Compile using:
csc.exe /t:library test.cs Next, register the library and generate a typelib:
regasm.exe /tlb test.dll Finally, view the typelib:
oleview.exe test.tlb You'll see the following:
[
uuid(519A4822-F224-47FA-BDC7-8037829365DC),
version(1.0),
custom(90883F05-3D28-11D2-8F17-00A0C9A6186D, Test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null)
]
library Test
{
importlib("mscorlib.tlb");
importlib("stdole2.tlb");
interface ITest;
[
odl,
uuid(F9B77B61-B4F0-4BE4-9C53-DED9592E90C6),
version(1.0),
dual,
oleautomation,
custom(0F21F359-AB84-41E8-9A78-36D110E6D2F9, ITest)
]
interface ITest : IDispatch {
[id(00000000), propget,
custom(54FC8F55-38DE-4703-9C4E-250351302B1C, 1)]
HRESULT Foo(
[in] BSTR value,
[out, retval] long* pRetVal);
};
[
uuid(AE5E53C8-54D6-4667-9396-582F5C8611BF),
version(1.0),
custom(0F21F359-AB84-41E8-9A78-36D110E6D2F9, Test)
]
coclass Test {
[default] interface _Object;
};
}; If you used PreserveSigAttribute , then it would simply be HRESULT Foo(BSTR value) .
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles]
|
|
|
|
|
Also, while we're on the subject.
How do strings returned from .net work?
If I have a method string getSomething()
I have to call it as: HRESULT getSomething(BSTR* result);
It seems I have to allocate the string for the result.
I'm doing:
CComBSTR result(20);
and call it:
getSomething(&result.m_str);
what happens if I return string longer than 20 characters? Does CLR allocate more chars?
I tried looking in MSDN, but I couldn't find any information. It seems all examples I can find only deal with ints or doubles.
|
|
|
|
|
It's an [out, retval] . Most often, you don't allocate these as the caller. Merely declare a variable and pass the address of the variable. Also, if you read the documentation for the CComBSTR class, you'll see the following remarks:Memory Leak Issues
Passing the address of an initialized CComBSTR to a function as an [out] parameter causes a memory leak.
In the example below, the string allocated to hold the string "Initialized" is leaked when the function OutString replaces the string.
CComBSTR bstrLeak(L"Initialized");
HRESULT hr = OutString(&bstrLeak);
To avoid the leak, call the Empty method on existing CComBSTR objects before passing the address as an [out] parameter.
Note that the same code would not cause a leak if the function's parameter was [in, out]. So, as you see - don't initialize it. You also don't need to mess with m_str . Since the CComBSTR contains only one member - m_str - passing the address of the CComBSTR instance is passing the address of the m_str (because of the way the class/struct is aligned).
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles]
|
|
|
|
|
I see. thanks.
Do you know if there are any restrictions on types you can use within .net COM client?
I have my C# class do:
new SqlConnection(connectionstring)
and it throws access violation exception:
Error Msg: System.TypeInitializationException: The type initializer for 'System.
Data.SqlClient.SqlConnectionFactory' threw an exception. ---> System.TypeInitial
izationException: The type initializer for 'System.Data.SqlClient.SqlPerformance
Counters' threw an exception. ---> System.AccessViolationException: Attempted to
read or write protected memory. This is often an indication that other memory h
as been corrupted.
at System.Data.ProviderBase.DbConnectionPoolCounters.GetInstanceName()
at System.Data.ProviderBase.DbConnectionPoolCounters.InitCounters(String cate
goryName, String categoryHelp)
at System.Data.SqlClient.SqlPerformanceCounters..ctor()
at System.Data.SqlClient.SqlPerformanceCounters..cctor()
--- End of inner exception stack trace ---
at System.Data.SqlClient.SqlConnectionFactory..ctor()
at System.Data.SqlClient.SqlConnectionFactory..cctor()
--- End of inner exception stack trace ---
at System.Data.SqlClient.SqlConnection..ctor()
at System.Data.SqlClient.SqlConnection..ctor(String connectionString)
When I use my client thru C#, it's all fine. My C++ COM clinet is very simple for the test case, it just creates COM object and calls one method with no parameters and no return values (I did that to see if it was some memory problem in C++ client).
|
|
|
|
|
I have a form with a fairly large client area. Therefore I allow it to scroll. On the form I have OK/Cancel Buttons. I really would like them to remain stationary. I tried a Forms Toolbar, but it scrolls with the client area.
Any ideas?
Thanks!
Mark
|
|
|
|
|
You could put a panel inside the form that would be your effective client area. The panel would be set to allow scrolling, but not the form. The panel would leave enough room for the OK\Cancel buttons, which would be on the form, not the panel.
Brian
|
|
|
|
|
Thanks Brian! I should have thought of that.
Mark
|
|
|
|
|
reference: http://msdn.microsoft.com/library/en-us/gdi/monitor_4mr7.asp?frame=true
========================================================================
SETUP:
I have two monitors using a dual video output NVIDIA Quadro NVS. One of them is the primary. The other is NOT part of the VIRTUAL DESKTOP.
APPLICATION:
One monitor will be for the cashier running her program and the other Independent Monitor will be for WEB, FLASH and VIDEO CONTENT to be played on, plus a section of the monitor for the running itemize total. I don't want the cashier to be able to move the mouse or window accidently over to the other monitor.
QUESTION:
How do I accomplish this? The Microsoft hyerlink above is quite cryptic for a C# guy learning C++. If anyone has another solution or a way to impliment this idea or can tell me some books to read, I would highly grateful, since I am on a very TIGHT SCHEDULE. THANK YOU ADVANCE.
Peter B.
|
|
|
|
|
Dunno if this helps, but this is how I place a form over the second monitor:
Screen [] screens = Screen.AllScreens;<br />
<br />
if (screens.GetUpperBound(0) > 0)<br />
{<br />
Screen secondary = screens[1];<br />
secondMonitor.Bounds = secondary.Bounds;<br />
secondMonitor.MinimumSize = secondary.Bounds.Size;<br />
}<br />
else<br />
{<br />
secondMonitor.Visible = false;<br />
}
My second monitor is part of the virtual desktop tho. Why isn't yours ?
Christian
I have drunk the cool-aid and found it wan and bitter. - Chris Maunder
|
|
|
|
|
Hi,
I want to send to SQL server a query I want to get randomly generated 100 rows where they are no generated before. I made my query like below:
mySqlCommand.CommandText = "SELECT name,rand(name) FROM people LIMIT 100 WHERE generated_before IS NULL";
Gives system error???
Thank you,
Cem Louis
|
|
|
|
|
You want to generate 100 rows, or get back 100 rows at random ?
Christian
I have drunk the cool-aid and found it wan and bitter. - Chris Maunder
|
|
|
|
|
I'm not sure when you get the LIMIT keyword from, it doesn't appear to be a valid T-SQL keyword.
Try
SELECT TOP 100 ....
Also, the RAND() function only accepts interger types. I am assuming that name is a string of some kind. I am not sure what you are trying to do with RAND()
If you can explain more about what you are trying to do I might be able to help more.
Do you want to know more?
Not getting the response you want from a question asked in an online forum: How to Ask Questions the Smart Way!
|
|
|
|
|
Anyway I did it like below:
"SELECT TOP 100 name FROM people ORDER BY NEWID()"
Cem
|
|
|
|
|
I have a project with several Forms open at the same time. Is there a way I can keep certain ones always on top? At runtime, each time the user clicks a form it gets focus and hides an overlapping forms.
Thanks!
Mark
|
|
|
|
|
Set the TopMost property of the form to true .
|
|
|
|
|
Waaaaaaaaaaahhhh
Have the same problem, to lazy to research and test code.
Please help the weaklings and the lazy ones...
Thank you very much for your help
|
|
|
|