How to move to a location in a web browser component? - c#

I have a .NET windows form page and a WebBrowser component inside. I load a page inside the web browser using the Navigate method as in:
webBrowser1.Navigate("http://www.stackoverflow.com");
The pages length is longer than the browsers height, so the vertical scroll bar appears. Now I want to move the scrollbar down to a specific position.
More specifically I want to search for a specific peace of text inside the page, and scroll to that position.
This behavior is implemented in the built-in "Find" function of the browser, but I can't figure out how to call the Find function from within my code, without the Find window appearing.
Although I don't want the Find window to appear, if the text matches are highlighted it is welcome.

You could do it using anchors.
webBrowser1.Navigate("http://www.stackoverflow.com#myAnchor");
and in your html define this:
<a id="myAnchor" />
This is in itself not very flexible, but if you consistently add anchor tags to key structural parts of the html, you can always jump to the section, block, or div that you want.

Related

Can I fixing control's position in rdlc report C#?

if control's height over one paper size, control move next page...
I want to fix them where I positioning.
if they height over current page, cut over parts and showing next page cutted parts.
like this
does it can?
If you're dynamically building the report from code you can certainly do that.
For a report being built dynamically, you'll need to track the approximate sizes of the page as well as the individual control heights.
If the control would take up more space than the available space on the page, you can enter a page break.
You have complete control on the output if you use GDI+ to generate the report view.
Hope this helps.

How to set the background of webview transparent in winRT?

I have a web view which loads html content in a page.How its back ground can set to transparent.I set the html background transparent.
Try this:
<WebView DefaultBackgroundColor="Transparent"/>
To my knowledge that's not possible since this an actual HTML page you are rendering inside the Webview.
The webview does not derive from Control and because of this, it does not support the same templating possibilities as if you we using a control that derived from Control.
Also since browsers can't have a transparent website, the website will appear white per default.
This may not directly relate to your question however I think it's still important to know when using the Webview. There is some important remarks from the documentation on MSDN concerning UI and rendering:
WebView has the characteristic that other UI regions such as controls cannot be rendered on top of the WebView. This is because of how window regions are handled internally, particularly how input events are processed and how the screen draws. If you want to render HTML content and also place other UI elements on top of that HTML content, you should use WebViewBrush as the render area. The WebView still provides the HTML source information, and you reference that WebView through the SourceName property. WebViewBrush does not have this overlay limitation.
If you want to display an interactive WebView that only occasionally has overlapping content (such as a drop-down list or app bar), you can temporarily hide the WebView control when necessary, replacing it with an element using a WebViewBrush fill. Then, when the overlapping content is no longer present, you can display the original WebView again. For more info, see the WebView control sample.
For more information see the full documentation.
They have fixed it in Windows Universal App.
If you set DefaultBackgroundColor to Transparent
and
body, html {
background:transparent;
}
you will get what you want

Fix diffrent text amount to web browser content

I have a web browser in my win form
I'm filling it's content with some text for each time(text size in each loop almost the same size).
my web browser size is fixed
i want to aromatically fix my content text to browser content
(for example if my content text size is more than the web browser content with some algorithm fix it to content and do not show scroll)
exactly some algorithm that fix Css for each content size to web browser size
is it possible?(may be some thing like change text size for best fix or ...)
all you really need to do it wrap your text inside some DIV tag, and this will auto encapsulate the text in your DIV to fit the window.
I'm assuming you do not want the horizontal scroll bar, is that correct? Because you haven't specified, I'm just guessing. If it is the vertical scroll bar you do not want, then let me know.
Otherwise, if you're text input is being placed in many different areas, and you really need more global or generalized control over this, you can alter the WIDTH attribute in your BODY tag to ensure it is exactly, or a few pixels smaller than the width of your WebBrowser control.
So if your WB control width is 600, you would place this in your BODY tag of the HTML page you have loaded (i'm assuming you have access to the HTML page, if not, once again, let me know).
<BODY WIDTH="590">
Let me know how you go, and if I've totally missed or misunderstood your question, please let me know and add the details necessary so that we can understand what you need.
Cheers.

How to change position of caret in MSHTML during mouse click?

I have a MSHTML-based control embedded in an application and the ContentEditable mode is used to edit documents inside it. The body of the HTML document initially contains the following lines:
<div></div>
<div id="signature"></div>
The caret is placed at the beginning of the document, that is inside the first DIV element. Now when user clicks with mouse inside the control in a place below the last line, the caret is moved into the second DIV element, as it's the closest one to the point where the user clicked.
I want to move the pointer to the end of the first DIV on the mouse click. Now I have the code to calculate the intended position of the caret as IMarkupPointer and IDisplayPointer. What I need to know is where to intercept the MSHTML event pipeline to do the actual caret move.
I've written code that implements IHTMLEditDesigner and moves the caret using IHTMLCaret.MoveCaretToPointer to the intended position. The problem is that no matter where I intercept the event (PreHandleEvent, PostHandleEvent or PostEditorEventNotify) the caret position is eventually reverted to the default one on single click (but it is not reverted if I hold the left mouse button pressed for a while or if I click with right mouse button).
Use jscript inside of the HTML that you load into the IE control. If you do not know HTML and jscript very well you will find this task very painful.
See these questions for my experience when I tried do so something like this.
Risk of using contentEditable in
IE
Why is ContentEditable
removing “ID” from div
I also had lots of other problem, including have to write resize logic in jscript to get the HTML editor to size along with the WinForm form and having to pass the default form/coontrol colours into the HTML editor so that it looked write then users changed colour schemes on Windows.
Even better just find a HTML editor and load it into the IE control, you will still have to code with standard window colours etc yourself.
There are also 3rd party winforms HTML editors you can use. If possible I think you should buy in a solution as ContentEditable is a lot harder in real life then it look.
A quick google found.
Writer by Lutz Roeder (of Reflector fame)
NetRix by netrixcomponent
Html Editor by Carl Nolan
HTML viewing and editing component for WinForms apps
Have you tried using a winforms timer with a timeout of 0?
When you get the mouse down event start the timer.
Then the MSHTML control will process the event
You will then go back to the windows message loop
All other messages in the message queue will then be process before the timer
Hopefully by now MSHTML has set the default caret position on single click
You can then move the caret position yourself when the timer fires
Have a look with Spy++ to see what events are being sent between the diffent windows in the MSHTML control to get other ideals. The MSHTML control is like no other winforms control and you have to go back to all the trick you used in the days of C and Win32 programming.
Maybe there are separate events for mouseDown mouseUp and mouseClick.
You intercept mouseClick but default behavior gets executed on mouseUp.
Have you tied setting the "focus" to the first div by finding the dom item for it, and calling the setFocus (or whatever it is called) dom method? The caret should move to where the fosus is.
(There are interfaces that MSHTML expose to find dom items and call methods on them. Sorry I don't recall the details of how to do this)
I believe you need to change the SelectStart property and leave the SelectionLength = 0. That will move the caret to a new position.

Putting ModalPopupExtender in a constant location

I've got a series of ModalPopupExtenders that I'm using to implement popup dialogs on an ASP.NET 2.0 page.
When they popup it's fairly easy to specify the location where they appear using the constructor using X and Y coordinates but I'm unsure how to deal with changes of window size which alters where they should be in cartesian space. I need them to appear relative to some other elements on the page.
I've tried hooking into the onresize javascript function in IE but this is broken and fires whenever a div changes size (problematic really given that i have lots of CollapsiblePanelExtenders in the UI.
Anybody ever done this and have any suggestions how i can get this working?
Edit : This code helps no end in capturing the resize event...
http://blog.stchur.com/2006/09/06/the-ie-resize-bug-revisited/
I've figured out how to do this.
I use onClickClick to display the modal popup after figuring out where to put them by getting the x + y coordinates from a known control from the DOM. Upon resize (from http://blog.stchur.com/2006/09/06/the-ie-resize-bug-revisited/) i've decided to just hide the popups
ModalPopupExtender has a property called RepositionMode for exactly this purpose

Categories