Вам нужно использовать Mouse.OverrideCursor
:
myButton.MouseEnter += (s,e) => Mouse.OverrideCursor = Cursors.Hand;
myButton.MouseLeave += (s,e) => Mouse.OverrideCursor = Cursors.Arrow;
Это абсолютно возможно - хотя вам, вероятно, понадобится создать свой собственный Appender. Однако это действительно легко сделать. Вот приблизительный пример (нужно продумать потокобезопасность ... это не потокобезопасно ... и я не уверен, что мне нравится статика ... но этого должно быть достаточно, чтобы подтолкнуть вас в правильном направлении):
public class BufferAppender extends org.apache.log4j.AppenderSkeleton {
private static Map<String, StringBuffer> buffers = new HashMap<String, StringBuffer>();
@Override
protected void append(LoggingEvent evt) {
String toAppend = this.layout.format(evt);
StringBuffer sb = getBuffer(evt.getLoggerName());
buffer.append(toAppend);
}
public static String getBufferContents(String loggerName) {
StringBuffer sb = buffers.get(sb);
if(sb == null) {
return null;
} else {
return sb.toString();
}
}
public static void clearBuffer(String loggerName) {
createBuffer(loggerName);
}
private static StringBuffer getBuffer(String loggerName) {
StringBuffer sb = buffers.get(loggerName);
if(sb == null) {
sb = createBuffer(loggerName);
}
return sb;
}
private static StringBuffer createBuffer(String loggerName) {
StringBuffer sb = new StringBuffer();
buffers.put(loggerName, sb);
return sb;
}
}
Вы можете создать подкласс org.apache.log4j.WriterAppender и предоставить ему ByteArrayOutputStream для хранения любых сообщений. См. Другие подклассы WriterAppender для вдохновения. Затем вы можете предоставить экземпляр этого объекта своему регистратору для добавления через addAppender.