HTML frames were once a really good technology for controlling page downloads. When people were connection at 9600 baud it was a pain to have to reload the header, menu, or footer, on every page load. Frames fixed this problem. However, since then bandwidth has increased, and there are better technologies that accomplish the same thing. Server side includes & other server side scripting platforms provide the same maintenance benefits to the webmaster. And things such as external CSS files provide the same bandwidth savings to the browser.
However frames remain poorly accessible. Search engines still have problems crawling them, users have trouble with page reloads & with bookmarking.
As such I can safely say that you shouldn't use frames. The only time I would entertain their use is in a web based application that you must log into first to access. In those cases neither bookmarking nor SE crawling is desired and the use of frames can provide some programming benefit.
The exception to this is iframes. Iframes or inline frames are a good technology for use when you're including content from another server within your site. The reason is that the iframe prevents delays in the other server from slowing down your page load. So by all means, use an iframe to serve advertisements or other extraneous content and you do not want slowing down how fast your actual content appears on the string. You don't much want SEs to crawl that content anyways.
You can also use iframes to block search engines from crawling sections of a page. For instance if you had something like a tag cloud that you worried would look like spam to a search engine you could serve it in an iframe from a file that is blocked by your robots.txt file. In this way a search engine will ignore that part of your page.
As the capabilities of HTML & CSS have increased the use of Javascript & DHTML have decreased to an extent, and that is a good thing. However you still need to be aware of issues with these technologies.
Search engines do not read javascript, and so yes, you could block content from being crawled by printing it with javascript much like I mentioned with the use of iframes. The problem with javascript though comes when people use it for content they do want crawled.
For instance many people like to use fancy interactive javscript & DHTML driven menus. These can sometimes be okay, but most often they are not. If the menu simply uses javascript to move around standard HTML anchor tags, then a search engine can usually still appropriately crawl it. However many such menus rely on javascript's on-click event handler instead of HTML anchor tags and search engines cannot process such things. In those cases your menu will end up being ignored by the search engine, which will make it difficult for it to crawl the rest of your site.
The only other issue with javascript is one I already mentioned, namely keeping it in external files you merely include into the HTML document. Doing this keeps the source code to a minimum, helps speed up page loads, and helps keyword density.
If you do use a DHTML menu you should include a proper text one either in your footer or in <noscript> tags.
Like javascript, Flash is another technology that search engines cannot crawl. There have been strides made, and there exists a way now for search engines to crawl links placed within Flash files, but not all do and the content, which tends to be mostly graphic based, still does not get crawled.
As such I recommend not using Flash for your website, and especially not using one of those Flash splash screen as a welcome to your site. Your site homepage is the highest weighted part of your site in most cases, and if all that is there is some Flash welcome movie then you have almost no spiderable content, ranking for any keyword will be extremely difficult.
If you must use Flash the proper & accessible way to use it as an optional viewing platform. Have the default site be HTML or CSS based and then either detect Flash with javascript and open a new window for it to play in, which the browser can then close if they wish. Or provide them with a button to launch your Flash version. Do not force it on them, and do not make it the default for viewing your site, or you'll be feeding the search engines poison.
Of course Flash is a great technology if you're using it to display content you don't need the search engines to index, such as games, advertisements, or interactive tools.
Forms are necessary for allowing browsers to interact with web pages, but like with other technologies search engines do not fully support them. Specifically a search engine will never submit a form on your site. So, if the only way to reach your content is through submitting a form, a search engine will not reach that content.
This can be used to your advantage. If you have a link you do not want a search engine to follow, making the navigation form based and then dressing up the form submit "button" to look like a link with CSS is certainly an option.
If there is content you want a search engine to crawl but users typically access through a form, you will want to provide text based navigation to reach that same content. For instance many large information sites with huge databases of content or statistics typically serve all that content to visitors via a form based internal search engine. However, to get search engines to crawl every bit of content as well, it is necessary to build a method of browsing through the entire library using simple text links.